nginx rewrite重寫規則配置教程php
rewrite能夠出現的地方有4個:NGX_HTTP_SRV_CONF,NGX_HTTP_SIF_CONF,NGX_HTTP_LOC_CONF,NGX_HTTP_LIF_CONF。分別對應着:
css
例子:
html
其中location的詳細描述和location的強大功能能夠在本網站搜索框中輸入「ngingx location」來搜索。
補充
1,break指令
默認值:none ;使用環境:server,location,if ;
該指令的做用是完成當前的規則集,再也不處理rewrite指令。
2,if指令
默認值:none ;使用環境:server,location
該指令用於檢查一個條件是否符合,若是條件符合,則執行大括號內的語句。If指令不支持嵌套,不支持多個條件&&和||處理。
nginx
3,return指令
語法:return code ;使用環境:server,location,if ;
該指令用於結束規則的執行並返回狀態碼給客戶端。web
例子,若是訪問的URL以".sh"或".bash"結尾,則返回403狀態碼。
正則表達式
4,rewrite 指令
語法:rewrite regex replacement flag
默認值:none ; 使用環境:server,location,if
該指令根據表達式來重定向URI,或者修改字符串。指令根據配置文件中的順序來執行。注意重寫表達式只對相對路徑有效。若是你想配對主機名,你應該使用if語句,示例以下:
apache
rewrite指令的最後一項參數爲flag標記,支持flag標記有:
1.last 至關於apache裏面的[L]標記,表示rewrite。
2.break本條規則匹配完成後,終止匹配,再也不匹配後面的規則。
3.redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址。
4.permanent 返回301永久重定向, 瀏覽器地址會顯示跳轉後的URL地址。
使用last和break實現URI重寫,瀏覽器地址欄不變。並且二者有細微差異,使用alias指令必須用last標記;使用proxy_pass指令時,須要使用break標記。
Last標記在本條rewrite規則執行完畢後,會對其所在server{......}標籤從新發起請求,而break標記則在本條規則匹配完成後,終止匹配。
通常在跟location中(location /{...})或直接在server標籤中編寫rewrite規則,推薦使用last標記;在非根location中(location /cms/{...}),則使用break。
若是URI中含有參數(/app/test.php?id=5),默認狀況下參數會被自動附加到替換串上,能夠經過在替換串的末尾加上?標記來解決這一問題。
例如:
瀏覽器
例如:若是將相似URL /photo/123456 重定向到 /path/to/photo/12/1234/123456.png
緩存
注:若是正則表達式裏面有花括號"{"或"}" ,應該使用雙引號或單引號。
5。Set指令
語法:set variable value ; 默認值:none ; 使用環境:server,location,if;
該指令用於定義一個變量,並給變量賦值。變量的值能夠爲文本、變量以及文本變量的聯合。
例子:set $varname "hello world";
6,Uninitialized_variable_warn指令
語法:uninitialized_variable_warn on|off
使用環境:http,server,location,if
該指令用於開啓和關閉未初始化變量的警告信息,默認值爲開啓。
7,Nginx Rewrite能夠用到的全局變量
bash
Nginx的Rewrite規則編寫實例
1.當訪問的文件和目錄不存在時,重定向到某個php文件
2.目錄對換 /123456/xxxx ====> /xxxx?id=123456
3.若是客戶端使用的是IE瀏覽器,則重定向到/ie目錄下
4.禁止訪問多個目錄
5.禁止訪問以/data開頭的文件
6.禁止訪問以.sh,.flv,.mp3爲文件後綴名的文件
7.設置某些類型文件的瀏覽器緩存時間
8.給favicon.ico和robots.txt設置過時時間;
這裏爲favicon.ico爲99天,robots.txt爲7天並不記錄404錯誤日誌
9.設定某個文件的過時時間;這裏爲600秒,並不記錄訪問日誌