1. 程式人生 > >nginx rewrite 指令

nginx rewrite 指令

nginx通過ngx_http_rewrite_module模組支援url重寫、支援if條件判斷,但不支援else。

該模組需要PCRE支援,應在編譯nginx時指定PCRE原始碼目錄, nginx安裝方法

nginx rewrite指令執行順序:

1.執行server塊的rewrite指令(這裡的塊指的是server關鍵字後{}包圍的區域,其它xx塊類似)
2.執行location匹配
3.執行選定的location中的rewrite指令
如果其中某步URI被重寫,則重新迴圈執行1-3,直到找到真實存在的檔案

如果迴圈超過10次,則返回500 Internal Server Error錯誤

break指令

語法:break;
預設值:無
作用域:server,location,if

停止執行當前虛擬主機的後續rewrite指令集
break指令例項:

 if ($slow) {
     limit_rate 10k;
     break;
 }

if指令

語法:if(condition){...}
預設值:無
作用域:server,location
對給定的條件condition進行判斷。如果為真,大括號內的rewrite指令將被執行。
if條件(conditon)可以是如下任何內容:

  • 一個變數名;false如果這個變數是空字串或者以0開始的字串;
  • 使用= ,!= 比較的一個變數和字串
  • 是用~, ~*與正則表示式匹配的變數,如果這個正則表示式中包含},;則整個表示式需要用" 或' 包圍
  • 使用-f ,!-f 檢查一個檔案是否存在
  • 使用-d, !-d 檢查一個目錄是否存在
  • 使用-e ,!-e 檢查一個檔案、目錄、符號連結是否存在
  • 使用-x , !-x 檢查一個檔案是否可執行

if指令例項

 if ($http_user_agent ~ MSIE) {
     rewrite ^(.*)$ /msie/$1 break;
 }

 if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
     set $id $1;
 }

 if ($request_method = POST) {
     return 405;
 }

 if ($slow) {
     limit_rate 10k;
 }

 if ($invalid_referer) {
     return 403;
 }

return指令

語法:return code;

return code URL;

return URL;
預設值:無
作用域:server,location,if

停止處理並返回指定狀態碼(code)給客戶端。
非標準狀態碼444表示關閉連線且不給客戶端發響應頭。
從0.8.42版本起,return 支援響應URL重定向(對於301,302,303,307),或者文字響應(對於其他狀態碼).
對於文字或者URL重定向可以包含變數

rewrite指令

語法:rewrite regex replacement [flag];
預設值:無
作用域:server,location,if
如果一個URI匹配指定的正則表示式regex,URI就按照replacement重寫。
rewrite按配置檔案中出現的順序執行。flags標誌可以停止繼續處理。
如果replacement以"http://"或"https://"開始,將不再繼續處理,這個重定向將返回給客戶端。
flag可以是如下引數
last 停止處理後續rewrite指令集,然後對當前重寫的新URI在rewrite指令集上重新查詢。
break 停止處理後續rewrite指令集,並不在重新查詢,但是當前location內剩餘非rewrite語句和location外的的非rewrite語句可以執行。
redirect 如果replacement不是以http:// 或https://開始,返回302臨時重定向
permant 返回301永久重定向
最終完整的重定向URL包括請求scheme(http://,https://等),請求的server_name_in_redirect和 port_in_redirec三部分 ,說白了也就是http協議 域名 埠三部分組成。

rewrite例項

 server {
     ...
     rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 last;
     rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra last;
     return 403;
     ...
 }

如果這些rewrite放到 “/download/” location如下所示, 那麼應使用break而不是last , 使用last將迴圈10次匹配,然後返回 500錯誤:

 location /download/ {
     rewrite ^(/download/.*)/media/(.*)..*$ $1/mp3/$2.mp3 break;
     rewrite ^(/download/.*)/audio/(.*)..*$ $1/mp3/$2.ra break;
     return 403;
 }

對於重寫後的URL(replacement)包含原請求的請求引數,原URL的?後的內容。如果不想帶原請求的引數 ,可以在replacement後加一個問號。如下,我們加了一個自定義的引數user=$1,然後在結尾處放了一個問號?,把原請的引數去掉。

rewrite ^/users/(.*)$ /show?user=$1? last;

如果正則表達regex式中包含 “}” 或 “;”, 那麼整個表示式需要用雙引號或單引號包圍.

rewrite_log指令


語法:rewrite_log on|off;
預設值:rewrite_log off;
作用域:http,server,location,if
開啟或關閉以notice級別列印rewrite處理日誌到error log檔案。

nginx開啟rewrite log例子

rewrite_log on;
error_log logs/xxx.error.log notice;

1.開啟rewrite on
2.把error log的級別調整到 notice

set指令


語法:set variable value;
預設值:none
作用域:server,location,if
定義一個變數並賦值,值可以是文字,變數或者文字變數混合體。

uninitialized_variable_warn指令


語法:uninitialized_variable_warn on | off;
預設值:uninitialized_variable_warn on
作用域:http,server,location,if

控制是否輸出為初始化的變數到日誌

轉載:http://www.nginx.cn/216.html

相關推薦

nginx rewrite 指令last break區別

nginx 的官方註釋是這樣的: last stops processing the current set of ngx_http_rewrite_module directives followed by a search for a new location matching the

nginx rewrite 指令

nginx通過ngx_http_rewrite_module模組支援url重寫、支援if條件判斷,但不支援else。 該模組需要PCRE支援,應在編譯nginx時指定PCRE原始碼目錄, nginx安裝方法。 nginx rewrite指令執行順序: 1.執行ser

nginxrewrite指令

服務 http add 最長 rewrite 指令 con 目的 優先 需求:我們在接收到一個/api/upload 開頭的url的時候 要轉發到另外一個地址。但是又不想追加/api/upload 只想追加/upload 地址。 Nginx提供了rewrite指令,用於

nginx rewrite正則子組最多匹配到$9

spl html splay erb ice line display and 需要 nginx rewrite正則匹配()匹配子組最多匹配到$9,就是從$0到$9 當需要匹配更多子組時,可通過變量來實現 if ($uri ~ ^/forum-15/sortid-74/(.

nginx rewrite 301 跳轉 post 請求失效問題解決

nginx rewrite 301 跳轉 post 請求失效問題解決upstream gaogd{ server 118.8.8.8:80 weight=2; } server { listen 80; server_name www.gaogd.com

Nginx Rewrite語法詳解

服務器端 .html use rgs args port 資源 如果 urn 重寫中用到的指令 if (條件) {} 設定條件,再進行重寫 set #設置變量 return #返回狀態碼 break #跳出rewrite rewrite #重寫 If 語法格式 If

Nginx Rewrite規則詳解

位置 定向 支持 rman 需求 clas 域名 匹配 .com Rewrite規則含義就是某個URL重寫成特定的URL,從某種意義上說為了美觀或者對搜索引擎友好,提高收錄量及排名等。 Rewrite規則的最後一項參數為flag標記,支持的flag標記主要有以下幾種: 1

常用nginx rewrite重定向-跳轉實例:

request 判斷 rewrite html clas 鏈接 admin ces 需要 1,將www.myweb.com/connect 跳轉到connect.myweb.com rewrite ^/connect$ http://connect.myweb.com

Nginx rewrite配置

大小寫 aps 文件 XML edi body 表達式 應用 判斷 rewrite應用   Rewrite模塊設置及Wordpress和Discuz的示例。Nginx的Rewrite規則比Apache的簡單靈活多了,從下面介紹可見一斑。 rewrite配置 Nginx可以

nginx rewrite解決 jenkins error 404心得筆記

nginx jenkins rewrite securityRealm 問題的描述: 報錯截圖:登錄按鈕截圖: 登錄鏈接: http://jenkins.oceanwing.com/securityRealm/commenceLogin?from=%2FsecurityRealm%2Flog

nginx rewrite規則

nginx rewrite 帶問號 需求:研發偶爾提出一些路由跳轉需求。解決問題:業務及研發無法處理的時候,需要運維這邊輔助路由規則。實現方法:nginx rewrite 知識了解:正則表達式匹配~ 區分大小寫匹配~ 不區分大小寫匹配!~區分大小寫不匹配!~不區分大小寫不匹配 rewrite指令的

nginx常用指令

默認 code col syn quit 退出 nginx rec pro ./nginx #打開 nginx nginx -s reload|reopen|stop|quit #重新加載配置|重啟|停止|退出 nginx nginx -t #測試配置是否有語法錯

nginx+rewrite+proxy+cache基本實驗

NGINX proxy rewrite cache 今天分享下nginx+rewrite+proxy+cachenginx於apache的區別 1.nginx基於ip做限制小實驗: worker_processes 1; events { worker_connections 10

Nginx Rewrite

概述 示例 htm 返回 root 規則 路徑名 index 優先級 Nginx Rewrite Rewrite基本概述 1.什麽是rewriteRewrite即URL重寫, 主要實現url地址重寫, 以及重定向, 就是把傳入Web的請求重定向到其他URL的過程。 2.Re

常用nginx rewrite重定向-跳轉例項

常用nginx rewrite重定向-跳轉例項: 1,將www.myweb.com/connect 跳轉到connect.myweb.com rewrite ^/connect$ http://connect.myweb.com permanent; rewrite ^/connect/(

nginx location指令語法詳解

語法規則: location [=|~|~*|^~] /uri/ { … } = 開頭表示精確匹配 ^~ 開頭表示uri以某個常規字串開頭, 如果把這個字首用於一個常規字串,那麼告訴nginx 如果路徑匹配那麼不測試正則表示式。nginx不對url做編碼,因此請求為

nginx root指令與alias指令的區別

root root和alias都可以定義在location模組中,都是用來指定請求資源的真實路徑,比如: location /i/ { root /data/w3; } 請求 http://foofish.net/i/top.gif 這個地址時,那麼在伺服器裡面對應的真

nginx rewrite only specific servername to https

需求: 把某個域名的80埠服務  ----》 重定向轉到 這個域名的 443埠的服務。   server { listen 80; server_name xxx.abcd.com.cn; if ($host

Nginx rewrite四種flag

利用nginx的rewrite命令,可以實現URL的重寫,可在nginx配置檔案的server、location、if部分使用,對於rewrite有四種不同的flag。 redirect:返回302臨時重定向,瀏覽器位址列會顯示跳轉後的URL地址,爬蟲不會更新URL permanent:返回301永久

Phpstorm 搭建可斷點除錯的php開發環境+nginx rewrite

Phpstorm 搭建可斷點除錯的php開發環境 測試環境為win10 X64 [xdebug] zend_extension = F:\Programs\PHP\ext\php_xdebug-2.4.1-5.4-vc9-nts.dll xdebug.idekey=