nginx rewrite
Rewrite 相關指令
- Nginx Rewrite 相關指令有 if、rewrite、set、return
if 語句
-
應用環境
server,location
語法:
if (condition) { … } if 可以支援如下條件判斷匹配符號 ~ 正則匹配 (區分大小寫) ~* 正則匹配 (不區分大小寫) !~ 正則不匹配 (區分大小寫) !~* 正則不匹配 (不區分大小寫) -f 和!-f 用來判斷是否存在檔案 -d 和!-d 用來判斷是否存在目錄 -e 和!-e 用來判斷是否存在檔案或目錄 -x 和!-x 用來判斷檔案是否可執行 在匹配過程中可以引用一些Nginx的全域性變數 $args 請求中的引數; $document_root 針對當前請求的根路徑設定值; $host 請求資訊中的"Host",如果請求中沒有Host行,則等於設定的伺服器名; $limit_rate 對連線速率的限制; $request_method 請求的方法,比如"GET"、"POST"等; $remote_addr 客戶端地址; $remote_port 客戶端埠號; $remote_user 客戶端使用者名稱,認證用; $request_filename 當前請求的檔案路徑名(帶網站的主目錄/usr/local/nginx/html/images /a.jpg) $request_uri 當前請求的檔案路徑名(不帶網站的主目錄/images/a.jpg) $query_string 與$args相同; $scheme 用的協議,比如http或者是https $server_protocol 請求的協議版本,"HTTP/1.0"或"HTTP/1.1"; $server_addr 伺服器地址,如果沒有用listen指明伺服器地址,使用這個變數將發起一次系統呼叫以取得地址(造成資源浪費); $server_name 請求到達的伺服器名; $document_uri 與$uri一樣,URI地址; $server_port 請求到達的伺服器埠號;
Rewrite flag
rewrite 指令根據表示式來重定向URI,或者修改字串。可以應用於server,location, if環境下每行rewrite指令最後跟一個flag標記,支援的flag標記有:
last 相當於Apache裡的[L]標記,表示完成rewrite。預設為last。 break 本條規則匹配完成後,終止匹配,不再匹配後面的規則 redirect 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址 permanent 返回301永久重定向,瀏覽器地址會顯示跳轉後URL地址
redirect 和 permanent區別則是返回的不同方式的重定向,對於客戶端來說一般狀態下是沒有區別的。而對於搜尋引擎,相對來說301的重定向更加友好,如果我們把一個地址採用301跳轉方式跳轉的話,搜尋引擎會把老地址的相關資訊帶到新地址,同時在搜尋引擎索引庫中徹底廢棄掉原先的老地址。使用302重定向時,搜尋引擎(特別是google)有時會檢視跳轉前後哪個網址更直觀,然後決定顯示哪個,如果它覺的跳轉前的URL更好的話,也許位址列不會更改,那麼很有可能出現URL劫持的現像。在做URI重寫時,有時會發現URI中含有相關引數,如果需要將這些引數儲存下來,並且在重寫過程中重新引用,可以用到 () 和 $N 的方式來解決。
2.3、Rewrite匹配參考示例
本地解析host檔案
# http://www.testpm.com/a/1.html ==> http://www.testpm.com/b/2.html
location /a {
root /html;
index 1.html index.htm;
rewrite .* /b/2.html permanent;
}
location /b {
root /html;
index 2.html index.htm;
}
例2:
# http://www.testpm.com/2019/a/1.html ==> http://www.testpm.com/2018/a/1.html
location /2019/a {
root /var/www/html;
index 1.html index.hml;
rewrite ^/2019/(.*)$ /2018/$1 permanent;
}
location /2018/a {
root /var/www/html;
index 1.html index.htl;
}
例3:
# http://www.qf.com/a/1.html ==> http://jd.com
location /a {
root /html;
if ($host ~* testpm.com ) {
rewrite .* http://jd.com permanent;
}
}
例4:
# http://www.qf.com/a/1.html ==> http://jd.com/a/1.html
location /a {
root /html;
if ( $host ~* testpm.com ){
rewrite .* http://jd.com$request_uri permanent;
}
}
例5: 在訪問目錄後新增/ (如果目錄後已有/,則不加/)
# http://www.tianyun.com/a/b/c
# $1: /a/b
# $2: c
# http://$host$1$2/
location /a/b/c {
root /usr/share/nginx/html;
index index.html index.hml;
if (-d $request_filename) {
rewrite ^(.*)([^/])$ http://$host$1$2/ permanent;
}
}
例6:
# http://www.tianyun.com/login/tianyun.html ==> http://www.tianyun.com/reg/login.html?user=tianyun
location /login {
root /usr/share/nginx/html;
rewrite ^/login/(.*)\.html$ http://$host/reg/login.html?user=$1;
}
location /reg {
root /usr/share/nginx/html;
index login.html;
}
例7:
#http://www.tianyun.com/qf/11-22-33/1.html ==> http://www.tianyun.com/qf/11/22/33/1.html
location /qf {
rewrite ^/qf/([0-9]+)-([0-9]+)-([0-9]+)(.*)$ /qf/$1/$2/$3$4 permanent;
}
location /qf/11/22/33 {
root /html;
index 1.html;
}
相關文章
- Nginx RewriteNginx
- Nginx rewrite 詳解Nginx
- nginx thinkphp rewrite配置項NginxPHP
- nginx rewrite語法格式Nginx
- nginx高階篇rewriteNginx
- Nginx 實現 Rewrite 跳轉Nginx
- nginx location匹配及rewrite規則Nginx
- Nginx location匹配及Rewrite重寫Nginx
- Nginx Rewrite實際應用配置解析Nginx
- Nginx 學習總結(4)—— Rewrite 模組Nginx
- NGINX使用rewrite實現http 跳轉 httpsNginxHTTP
- nginx學習-ngx_http_rewrite_module模組NginxHTTP
- nginx配置location總結及rewrite規則寫法Nginx
- 一篇文章說透Nginx的rewrite模組Nginx
- ubuntu15 安裝nginx 報錯:the HTTP rewrite module requires the PCRE library.UbuntuNginxHTTPUI
- Apache Rewrite詳解Apache
- Clang -rewrite-objcOBJ
- Rewrite %{HTTP_HOST}用法HTTP
- Rewrite %{REQUEST_FILENAME}用法
- Rewrite %{QUERY_STRING}用法
- mod_rewrite模組
- MySQL Rewriter Query Rewrite PluginMySqlPlugin
- Rewrite %{HTTP_USER_AGENT}用法HTTP
- 雲端計算運維學習---Nginx服務中rewrite引數的死迴圈問題運維Nginx
- 為 Charles 新增代理頁面按鈕(Rewrite)
- rewrite實現目錄之間的跳轉
- 循序漸進nginx(三):日誌管理、http限流、https配置,http_rewrite模組,第三方模組安裝,結語NginxHTTP
- apisix~14在自定義外掛中呼叫proxy_rewriteAPI
- mitmproxy 代理工具介紹:rewrite和map local實現MIT
- 【Nginx】Nginx容器Nginx
- Nginx-04-Docker NginxNginxDocker
- windows 中nginx奇葩報錯 nginx: [emerg] unknown directive "#" in nginx/conf/nginx.conf:3WindowsNginx
- 【nginx】invalid PID number ““ in “/usr/local/nginx/logs/nginx.pid“Nginx
- nginx之 nginx限流配置Nginx
- NginxNginx
- 【應用服務 App Service】 App Service Rewrite 例項 - 反向代理轉發功能APP
- openrewrite/rewrite: 轉換升級Java或Spring程式碼的自動化工具JavaSpring
- URL重寫(rewrite)的具體實現與異常問題解決