rewrite語法規則
阿新 • • 發佈:2018-12-11
rewrite規則
格式:rewrite regex replaceent [flag] 1)rewrite配置可以在server 、location以及if配置段內生效 2)regex是用於匹配URI的正則表示式,其不會匹配到$host(域名) 3)replaceemt是目標跳轉的URI,可以以http://或者https://開頭,也可以省略$host,直接寫$request_uri部分(即請求的連結) 4)flag是用來設定rewrite對URI的處理能力,其中有break、 last 、rediect 、permanent,其中break和last在前面已經介紹過。rediect和permanent的區別在於,前者為臨時重定向(302),後者是永久重定向(301),對於使用者通過瀏覽器訪問,這2者的效果是一致的。但是對於搜尋引擎蜘蛛爬蟲來說就有區別了,使用301更有利於SEO。所以建議replacement是以http://或者https://開頭的flag使用permanent。
示例1
location / {
rewrite /(.*) http://www.test.com/$1 permanent;
}
說明:.*為正則表示式,用()括起來,在後面的URI中可以呼叫它,第一次出現的()用$1呼叫,第二次出現的()用$2呼叫,以此類推
示例2
location / {
rewrite /.* http://www.test.com$request_uri permanent;
}
說明:在replacement中,支援變數,這裡的$request_uri就是客戶端請求的連結
示例3
server{ listen 80; server_name www.123.com; root /tmp/123.com; index index.html; rewrite /(.*) /abc/$1 redirct; } 說明:本例中的rewrite規則有問題,會造成連續迴圈,nginx有個最大50次限制,最終會失敗,解決該問題有以下2個方案 方案1 serve{ listen 80; server_name www.123.com; root /tmp/123.com index index.html; rewrite /(.*) /abc/$1 break; } 說明:在rewrite中使用break,會避免迴圈 方案2 server{ listen 80; server_name www.123.com; root /tmp/123.com; index index.html; if ($request_uri !~ '^/abc/') { rewrite /(.*) /abc/$1 redirect; } } 說明:加一個條件限制,也可以避免產生迴圈