1. 程式人生 > >nginx 配置解決 ---react 、vue 單頁面路由之後重新整理404---問題

nginx 配置解決 ---react 、vue 單頁面路由之後重新整理404---問題

nginx中文文件:http://www.nginx.cn/doc/

nginx官網:http://nginx.org/en/docs/

Nginx開發從入門到精通:http://tengine.taobao.org/book/index.html

1、問題現象?

答:在瀏覽器中直接訪問www.xxx.com會正常顯示頁面,先訪問www.xxx.com後再點“demo" 跳轉到www.lyy.com/demo是正常顯示demo頁面的。這時在此頁面f5”重新整理“就會出現 404了。

 

2、分析出現404現象的原因?

答:這是web單頁面開發模式造成的。現在主流的前端框架基本都是單頁面的。如:react、vue等。

單頁面簡單來說就是訪問所有資源路徑、其實頁面內容只有一個(一般是index.html)。這個頁面中引入的js框架會根據當前訪問的url去路由到相應的子頁面元件(可以理解為頁面片段)進行邏輯處理和頁面渲染。

然而當你訪問www.xxx.com/demo其實web站中並沒demo這個頁面的資源(demo只是給js框架路由用的)。所以就報404啦!

 

3、怎麼解決這個問題,才能不讓他404,又能讓js框架正確路由呢?

答:分析出產生問題的原因就很好解決這個問題了。

       解決:滿足以下兩點就行:

       1.重新整理時要保證url路徑不變。即不能用重定向去訪問index.html,因為url會變。變了js框架就沒法路由,因為不知道你上次是哪個url了。

         2.伺服器響應的內容一定要是index.html,因為index.html這裡載入了js框架和初始化一些東西。

具體做法:用nginx配置,不改變url的情況下響應index.html資源的內容。

 

	location /demo {
	          rewrite /index.html break;
              root 根路徑;
        }
 
		
	location /static {
              alias   根路徑/static;
              index  index.html;
       }

這裡有個很重要的點:break 

break 並不是重定向說告訴瀏覽器你重新去訪問index.html。而是說內部去找  /index.html頁面。去root對應的目錄下找。找到就返回頁面內容。這樣就保證了在url不變的情況下固定返回index.html內容。如果在root對應的目錄中沒找到index.html就會404了。和break 同級的命令lest,才是讓瀏覽器重定向的,即是重新發出請求。