符號含義:
正則表達式匹配:
~ 為區分大小寫匹配 ~* 為不區分大小寫匹配 !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配
文件及目錄匹配:
-f和!-f用來判斷是否存在文件 -d和!-d用來判斷是否存在目錄 -e和!-e用來判斷是否存在文件或目錄 -x和!-x用來判斷文件是否可執行
flag標記
last 相當於Apache里的[L]標記,表示完成rewrite;完成重寫指令,之后搜索相應的URI或location。 break 終止匹配, 不再匹配后面的規則;完成重寫指令。 redirect 返回302臨時重定向;如果替換字段用http://開頭則被使用。
permanent 返回301永久重定向 地址欄會顯示跳轉后的地址。
可用的全局變量有,可以用做條件判斷:
$args, 請求中的參數; $content_length, HTTP請求信息里的"Content-Length"; $content_type, 請求信息里的"Content-Type"; $document_root, 針對當前請求的根路徑設置值; $document_uri, 與$uri相同; $host, 請求信息中的"Host",如果請求中沒有Host行,則等於設置的服務器名; $limit_rate, 對連接速率的限制; $request_method, 請求的方法,比如"GET"、"POST"等; $remote_addr, 客戶端地址; $remote_port, 客戶端端口號; $remote_user, 客戶端用戶名,認證用; $request_filename, 當前請求的文件路徑名 $request_body_file $request_uri, 請求的URI,帶查詢字符串; $query_string, 與$args相同; $scheme, 所用的協議,比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect; $server_protocol, 請求的協議版本,"HTTP/1.0"或"HTTP/1.1"; $server_addr, 服務器地址,如果沒有用listen指明服務器地址,使用這個變量將發起一次系統調用以取得地址(造成資源浪費); $server_name, 請求到達的服務器名; $server_port, 請求到達的服務器端口號; $uri, 請求的URI,可能和最初的值有不同,比如經過重定向之類的。
可以使用在 server, location, if 區域的關鍵字:
return指令:該指令用於結束規則的執行並返回狀態碼給客戶端
示例:如果訪問的URL以".sh"或".bash"結尾,則返回403狀態碼 location ~ .*.(sh|bash)?$ { return 403; }
rewrite 指令:使用nginx提供的全局變量或自己設置的變量,結合正則表達式和標志位實現url重寫以及重定向
rewrite 語法格式:
rewrite regex(正則) replacement flag (rewrite 源地址 目標地址)
flag: 斷開上次永久重定向
last: last一般寫在server和if中 停止執行其他重寫規則,根據URI繼續搜索其他location
break:break一般使用在location url重寫后,直接使用當前資源,不再執行location里余下的語句,完成本次請求
redirect:302臨時重定向,地址欄改變,爬蟲不更新URI
permanent:301永久重定向。地址欄改變,爬蟲更新URI
示例:把http://example.com/old.php?para=xxx 重定向到 http://example.com/new 不去參數: 寫法:rewrite ^/old.php(.*) /new permanent; 結果:http://example.com/new?para=xxx 去掉參數: 寫法:rewrite ^/old.php(.*) /new? permanent; 結果:http://example.com/new
詳情請看:https://blog.csdn.net/luomao2012/article/details/81167945