nginx rewrite 正則表達式匹配
大小寫匹配
~ 為區分大小寫匹配
~* 為不區分大小寫匹配
!~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配
文件及目錄匹配
-f和!-f用來判斷是否存在文件
-d和!-d用來判斷是否存在目錄
-e和!-e用來判斷是否存在文件或目錄
-x和!-x用來判斷文件是否可執行
flag標記
last 相當于Apache里的[L]標記,表示完成rewrite
break 終止匹配, 不再匹配后面的規則。
redirect 返回302臨時重定向 地址欄會顯示跳轉后的地址。
permanent 返回301永久重定向 地址欄會顯示跳轉后的地址。
logcation的幾個使用實例:
1)location / { }:匹配任何查詢,因為所有請求都以 / 開頭。但是正則表達式規則將被優先和查詢匹配。
2)location =/ {}:僅僅匹配/
3)location ~* /.(gif|jpg|jpeg)$
{
rewrite /.(gif|jpg)$ /logo.png;
}:location不區分大小寫,匹配任何以gif,jpg,jpeg結尾的文件。
幾個實例:
多目錄轉成參數
要求:abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2
規則配置:
代碼如下:
if ($host ~* (.*)/.domain/.com) {
set $sub_name $1;
rewrite ^/sort//(/d+)//?$ /index.php?act=sort&cid=$sub_name&id=$1 last;
}
目錄對換
要求:/123456/xxxx -> /xxxx?id=123456
規則配置:
rewrite ^/(/d+)/(.+)/ /$2?id=$1 last;
再來一個針對瀏覽器優化的自動rewrite,這里rewrite后的目錄可以是存在的;
例如設定nginx在用戶使用ie的使用重定向到/nginx-ie目錄
規則如下:
代碼如下:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}
目錄自動加“/” ,這個功能一般瀏覽器自動完成
代碼如下:
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
以下這些可能就跟廣義的rewrite重寫無關了
禁止htaccess
代碼如下:
location ~//.ht {
deny all;
}
[code]
禁止多個目錄
[code]
location ~ ^/(cron|templates)/ {
deny all; break;
}
禁止以/data開頭的文件,可以禁止/data/下多級目錄下.log.txt等請求
代碼如下:
location ~ ^/data {
deny all;
}
禁止單個文件
代碼如下:
location ~ /data/sql/data.sql {
deny all;
}
給favicon.ico和robots.txt設置過期時間; 這里為favicon.ico為99天,robots.txt為7天并不記錄404錯誤日志
新聞熱點
疑難解答