nginx rewrite 偽靜態配置參數和使用例子
2024-08-30 12:27:23
供稿:網友
正則表達式匹配,其中:
* ~ 為區分大小寫匹配
* ~* 為不區分大小寫匹配
* !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配
文件及目錄匹配,其中:
* -f和!-f用來判斷是否存在文件
* -d和!-d用來判斷是否存在目錄
* -e和!-e用來判斷是否存在文件或目錄
* -x和!-x用來判斷文件是否可執行
flag標記有:
* last 相當于Apache里的[L]標記,表示完成rewrite
* break 終止匹配, 不再匹配后面的規則
* redirect 返回302臨時重定向 地址欄會顯示跳轉后的地址
* permanent 返回301永久重定向 地址欄會顯示跳轉后的地址
一些可用的全局變量有,可以用做條件判斷(待補全)
代碼如下:
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
結合QeePHP的例子
代碼如下:
if (!-d $request_filename) {
rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&controller=$1&action=$2&$3 last;
rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&controller=$1 last;
break;
多目錄轉成參數
代碼如下:
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;
例如下面設定nginx在用戶使用ie的使用重定向到/nginx-ie目錄下:
代碼如下:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}
目錄自動加“/”
代碼如下:
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
禁止htaccess
代碼如下:
location ~//.ht {
deny all;
}
禁止多個目錄
代碼如下:
location ~ ^/(cron|templates)/ {
deny all;
break;
}
禁止以/data開頭的文件
可以禁止/data/下多級目錄下.log.txt等請求;
代碼如下:
location ~ ^/data {
deny all;
}
禁止單個目錄
不能禁止.log.txt能請求
代碼如下:
location /searchword/cron/ {
deny all;
}
禁止單個文件
代碼如下:
location ~ /data/sql/data.sql {
deny all;
}
給favicon.ico和robots.txt設置過期時間;
這里為favicon.ico為99天,robots.txt為7天并不記錄404錯誤日志
代碼如下:
location ~(favicon.ico) {
log_not_found off;
expires 99d;
break;
}
location ~(robots.txt) {