Nginx 之 Rewrite 規則


write 規則介紹

Rewite 規則作用

  • Rewrite規則可以實現對url的重寫,以及重定向

 作用場景:

  • URL訪問跳轉,支持開發設計,如頁面跳轉,兼容性支持,展示效果等
  • SEO優化
  • 維護:后台維護、流量轉發等
  • 安全

注:nginx官方文檔:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

配置語法:

  • Syntax: rewrite regex replacement [flag];
  • Default:——
  • Context:server、location、if

簡單實例

rewrite ^(.*)$ /pages/maintain.html break;

解釋說明:

  • 會把所有的請求都重定向到 /pages/maintain.html 頁面 

常用的正則表達式

在linux下,可以用pcretest來測試

小示例

rewrite index\.php$ /pages/maintain.html break;
        if ($http_user_agent ~ MSIE) {
            rewrite ^(.*)$ /msie/$1 break;
        }

解釋說明

  • \     --轉義字符
  • ( ) --用於匹配括號之間的內容,通過$1、$2調用

 (.*) 會把所有參數的內容提取,傳到/msie/下

rewrite配置語法中的flag參數

last 停止rewrite檢測【如果沒有匹配到,會繼續向下匹配】

break 停止rewrite檢測【如果沒有匹配到,則不再向下匹配,直接返回結果404】

redirect 返回302臨時重定向,地址欄會顯示跳轉后的地址

permanent 返回301永久重定向,地址欄會顯示跳轉后的地址

last與break的區別案例

 test_rewrite1.conf

server {
    listen 80 default_server;
    server_name www.zhangbiao.com;

    access_log  /var/log/nginx/log/host.access.log  main;

    root /opt/app/code;
    location ~ ^/break {
        rewrite ^/break /test/ break;
    }

    location ~ ^/last {
         rewrite ^/last /test/ last;
    }

    location /test/ {
       default_type application/json;
       return 200 '{"status":"success"}';
    }
}

 

可以在終端使用 curl -vL 可以看到請求的全過程

curl -vL www.zhangbiao.com/last/

  

 訪問

http://www.zhangbiao.com/test/

 

訪問

http://www.zhangbiao.com/last/

 

 

 訪問

http://www.zhangbiao.com/break/

 

可以發現訪問 last 的時候新建立了一個請求 /test/ ,而訪問/break/ 請求的時候 會去 /opt/app/code 下找相應的資源,沒找到所以報錯

 

 

Rewrite規則_redirect和permanent區別

 test_rewrite1.conf

server {
    listen 80 default_server;
    server_name www.zhangbiao.com;

    access_log  /var/log/nginx/log/host.access.log  main;

    root /opt/app/code;
    location ~ ^/imooc {
         rewrite ^/imooc http://www.imooc.com/ permanent;
         #rewrite ^/imooc http://www.imooc.com/ redirect;
    }

}

 

redirect 表示臨時的重定向 ,只要后端服務是開者的。每次訪問 /imoc 都會重定向到  http://www.imooc.com

permanent 表示永久重定向,第一次訪問成功后,把后端服務關閉后,訪問/imoc 仍然會重定向到  http://www.imooc.com

 

 rewrite 規則使用場景案例

test_rewrite.conf

server {
    listen       80;
    server_name  www.zhangbiao.com;
    root   /opt/app/code;

    location / {
        rewrite ^/course-(\d+)-(\d+)-(\d+)\.html$ /course/$1/$2/course_$3.html break;
        if ($http_user_agent ~* Chrome) {
            rewrite ^/nginx http://coding.imooc.com/class/121.html redirect;
        }

        if (!-f $request_filename) {
            rewrite ^/(.*)$ http://www.baidu.com/$1 redirect;
        }
        index  index.html index.htm;
    }

    error_page   500 502 503 504 404  /50x.html;
}

  

 訪問在 /opt/app/code/course/11/22 下存在的資源文件

http://www.zhangbiao.com/course-11-22-33.html

 

 訪問在 /opt/app/code/course/11/22 下不存在的資源文件  

http://www.zhangbiao.com/course-11-22-5

 

rewrite優先級規則

  • 執行server 塊的rewrite 指令。將所有的網站都重定向同一個網站。
  • 執行location匹配。
  • 執行選定的location中的rewrite。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM