參考:https://www.phpmianshi.com/?id=98
一.last & break
(1)last 和 break 當出現在location 之外時,兩者的作用是一致的沒有任何差異。
注意一點就是,他們會跳過所有的在他們之後的rewrite 模塊中的指令,去選擇自己匹配的location
(2)last 和 break 當出現在location 內部時,兩者就存在了差異
last: 使用了last 指令,rewrite 後會跳出location 作用域,重新開始再走一次剛剛的行爲
break: 使用了break 指令,rewrite後不會跳出location 作用域。它的生命也在這個location中終結。
大白話解釋:
last:
重新將rewrite後的地址在server標籤中執行
break:
將rewrite後的地址在當前location標籤中執行
我們來測試一下,nginx.conf配置如下:
default_type text/html ; location /break/ { rewrite ^/break/(.*) /test/$1 break; return 200 "break page"; } location /last/ { rewrite ^/last/(.*) /test/$1 last; return 200 "last page"; } location /test/ { return 200 "test page"; } rewrite ^/sort/(.*) /test/$1 last; location /sort/ { return 200 "sort page"; }
1. 輸入 https://www.phpmianshi.com/break/
返回404, rewrite後在本location沒找到test匹配規則,所以404,符合 "rewrite後不會跳出location 作用域。它的生命也在這個location中終結"
2. 輸入 https://www.phpmianshi.com/last/
返回 test page 符合:rewrite 後會跳出location 作用域,重新開始再走一次剛剛的行爲
3. 輸入 https://www.phpmianshi.com/sort/
返回 test page
我們把 :rewrite ^/sort/(.*) /test/$1 last; 放到最後一行輸出結果也是一樣的 說明:交換rewrite和location位置,執行結果不變,說明這個和位置無關
二、permanent & redirect:
permanent: 永久性重定向。請求日誌中的狀態碼爲301
redirect:臨時重定向。請求日誌中的狀態碼爲302
從實現功能的角度上去看,permanent 和 redirect 是一樣的。不存在好壞。也不存在什麼性能上的問題。但是對seo會有影響,這裏要根據需要做出選擇
頁面永久性移走(301重定向)是一種非常重要的“自動轉向”技術。
301重定向可促進搜索引擎優化效果
從搜索引擎優化角度出發,301重定向是網址重定向最爲可行的一種辦法。當網站的域名發生變更後,搜索引擎只對新網址進行索引,同時又會把舊地址下原有的外部鏈接如數轉移到新地址下,從而不會讓網站的排名因爲網址變更而收到絲毫影響。同樣,在使用301永久性重定向命令讓多個域名指向網站主域時,亦不會對網站的排名產生任何負面影響。
302重定向可影響搜索引擎優化效果
迄今爲止,能夠對302重定向具備優異處理能力的只有Google。也就是說,在網站使用302重定向命令將其它域名指向主域時,只有Google會把其它域名的鏈接成績計入主域,而其它搜索引擎只會把鏈接成績向多個域名分攤,從而削弱主站的鏈接總量。既然作爲網站排名關鍵因素之一的外鏈數量受到了影響,網站排名降低也是很自然的事情了。
在 permanent 和 redirect 中提到了 狀態碼爲301 和 302。 記住:last 和 break 想對於的訪問日誌的請求狀態碼爲200
這兩類關鍵字差異:
當你打開一個網頁,同時打開debug 模式時,會發現301 和 302 時的行爲是這樣的。第一個請求301 或者 302 後,瀏覽器重新獲取了一個新的URL ,然後會對這個新的URL 重新進行訪問。所以當你配置的是permanent 和 redirect ,你對一個URL 的訪問請求,落到服務器上至少爲2次;而當你配置了last 或者是break 時,你最終的URL 確定下來後,不會將這個URL返回給瀏覽器,而是將其扔給了fastcgi_pass或者是proxy_pass指令去處理。請求一個URL ,落到服務器上的次數就爲1次。
注意:配置last 在跨域的時候效果和redirect一致,都是返回302狀態碼,請求地址也發生改變