Nginx URL重寫規則配置詳解
nginx的重寫模組是一個簡單的正規表示式匹配與一個虛擬堆疊機結合。依賴於PCRE庫,因此需要安裝pcre。根據相關變數重定向和選擇不同的配置,從一個location跳轉到另一個location,不過這樣的迴圈最多可以執行10次,超過後nginx將返回500錯誤。同時,重寫模組包含set指令,來建立新的變數並設其值,這在有些情景下非常有用的,如記錄條件標識、傳遞引數到其他location、記錄做了什麼等等。
語法:break 預設值:none 使用欄位:server, location, if
作用:完成當前設定的重寫規則,停止執行其他的重寫規則。
語法:if (condition) { … } 預設值:none 使用欄位:server, location
注意:儘量考慮使用trp_files代替。
判斷的條件可以有以下值:
一個變數的名稱:空字元傳”“或者一些“0”開始的字串為false。 字串比較:使用=或!=運算子 正規表示式匹配:使用~(區分大小寫)和~(不區分大小寫),取反運算!~ 和!~。 檔案是否存在:使用-f和!-f運算子 目錄是否存在:使用-d和!-d運算子 檔案、目錄、符號連結是否存在:使用-e和!-e運算子 檔案是否可執行:使用-x和!-x運算子
語法:return code 預設值:none 使用欄位:server, location, if
停止處理併為客戶端返回狀態碼。非標準的444狀態碼將關閉連線,不傳送任何響應頭。可以使用的狀態碼有:204,400,402-406,408,410, 411, 413, 416與500-504。如果狀態碼附帶文欄位落,該文字將被放置在響應主體。相反,如果狀態碼後面是一個URL,該URL將成為location頭補值。沒有狀態碼的URL將被視為一個302狀態碼。
語法:rewrite regex replacement flag 預設值:none 使用欄位:server, location, if
按照相關的正規表示式與字串修改URI,指令按照在配置檔案中出現的順序執行。可以在重寫指令後面新增標記。
注意:如果替換的字串以http://開頭,請求將被重定向,並且不再執行多餘的rewrite指令。
尾部的標記(flag)可以是以下的值:
last – 停止處理重寫模組指令,之後搜尋location與更改後的URI匹配。 break – 完成重寫指令。 redirect – 返回302臨時重定向,如果替換欄位用http://開頭則被使用。 permanent – 返回301永久重定向。
語法:rewrite_log on | off 預設值:rewrite_log off 使用欄位:server, location, if 變數:無
啟用時將在error log中記錄notice級別的重寫日誌。
語法:set variable value 預設值:none 使用欄位:server, location, if
為給定的變數設定一個特定值。
語法:uninitialized_variable_warn on|off 預設值:uninitialized_variable_warn on 使用欄位:http, server, location, if
控制是否記錄未初始化變數的警告資訊。
可以使用括號來捕獲,後續可以根據位置來將其引用,位置變數值取決於捕獲正規表示式中的順序,$1引用第一個括號中的值,$2引用第二個括號中的值,以此類推。如:
^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$ # $1是兩個小寫字母組成的字串 # $2是由小寫字母和0到9的數字組成的5個字元的字串 # $3將是個檔名 # $4是png、jpg、gif中的其中一個。
請求被改寫。該URI可能包含正規表示式中的捕獲的位置引數或這個級別下的nginx任何配置變數。如:
/data?file=$3.$4
如果這個URI不匹配nginx配置的任何location,那麼將給客戶端返回301(永久重定向)或302(臨時重定向)的狀態碼來表示重定向型別。該狀態碼可以透過第三個引數來明確指定。
第三部分也就是尾部的標記(flag)。 last標記將導致重寫後的URI搜尋匹配nginx的其他location,最多可迴圈10次。如:
rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4 last;
break指令可以當做自身指令。如:
if ($bwhog) { limit_rate 300k; break; }
http { #定義image日誌格式 log_format imagelog '[$time_local] ' $image_file ' ' $image_type ' ' $body_bytes_sent ' ' $status; # 開啟重寫日誌 rewrite_log on; server { root /home/www; location / { # 重寫規則資訊 error_log logs/rewrite.log notice; # 注意這裡要用‘’單引號引起來,避免{} rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4; # 注意不能在上面這條規則後面加上“last”引數,否則下面的set指令不會執行 set $image_file $3; set $image_type $4; } location /data { # 指定針對圖片的日誌格式,來分析圖片型別和大小 access_log logs/images.log mian; root /data/images; # 應用前面定義的變數。判斷首先檔案在不在,不在再判斷目錄在不在,如果還不在就跳轉到最後一個url裡 try_files /$arg_file /image404.html; } location = /image404.html { # 圖片不存在返回特定的資訊 return 404 "image not found\n"; } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2638621/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nginx偽靜態規則重寫Nginx
- ThinkPHP5.0 Linux Apache/Nginx重寫URL配置PHPLinuxApacheNginx
- Nginx實現URL重寫Nginx
- 詳情頁 url 規則
- nginx TP5 URL 重寫Nginx
- nginx配置location總結及rewrite規則寫法Nginx
- url規則
- nginx配置詳解Nginx
- htmlhint 規則詳解HTML
- servlet的url-pattern匹配規則詳細描述Servlet
- Nginx如何配置HTTPS詳解NginxHTTP
- Nginx日誌配置詳解Nginx
- nginx 詳解 - 詳細配置說明Nginx
- nginx 詳解 – 詳細配置說明Nginx
- modsecurity:規則例子:匹配url
- Nginx的配置檔案詳解Nginx
- Nginx 配置檔案 nginx.conf 中文詳解Nginx
- nginx location匹配規則Nginx
- Nginx 跳轉規則Nginx
- 十分鐘瞭解eslint配置 && 編寫自定義eslint規則EsLint
- Spring Cloud Alibaba基礎教程:Nacos配置的載入規則詳解SpringCloud
- Nginx 配置檔案引數詳解Nginx
- nginx.conf 配置檔案詳解Nginx
- Nginx的超時timeout配置詳解Nginx
- Nginx支援url不區分大小寫Nginx
- Nginx匹配規則練習Nginx
- 【ASP.NET Core】URL重寫ASP.NET
- 詳解網路知識:iptables規則
- iptables詳解及docker的iptables規則Docker
- 版本命名及限定規則詳解
- 詳解Nginx如何配置Web伺服器NginxWeb伺服器
- 在 apache 中重寫規則不生效的問題 [No input file specified.] 解決Apache
- sql改寫優化:簡單規則重組實現SQL優化
- nginx location匹配及rewrite規則Nginx
- Nginx 配置二級虛擬目錄訪問 Laravel 重寫NginxLaravel
- IIS SSL認證流程& url重寫
- PHP實現url重寫和.htaccessPHP
- nginx-k8s 相關配置詳解NginxK8S