Nginx中last和break redirect和permanent區別和聯繫

參考: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狀態碼,請求地址也發生改變

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章