天天看點

配置Nginx服務中Rewrite的應用

URL看起來更規範、合理

企業會将動态URL位址僞裝成靜态位址提供服務

網址換新域名後,讓舊的通路跳轉到新的域名上

服務端某些業務調整

配置Nginx服務中Rewrite的應用

使用<code>rewrite</code>進行比對跳轉

使用<code>if</code>比對全局變量後跳轉

使用<code>location</code>比對再跳轉

使用<code>if</code>全局變量比對

使用<code>proxy_ pass</code>反向代理

字元

說明

<code>^</code>

比對輸入字元串的起始位置

<code>$</code>

比對輸入字元串的結束位置

<code>*</code>

比對前面的字元零次或多次

<code>+</code>

比對前面的字元一次或多次

<code>?</code>

比對前面的字元零次或一次

<code>.</code>

比對除“\n”之外的任何單個字元。使用諸如"[.\n]"之 類的模式,可比對包括“n”在内的任意字元

<code>\</code>

将後面接着的字元标記為一個特殊字元或一個原義字元或一個向後引用

<code>\d</code>

比對純數字

<code>{n}</code>

重複n次

<code>{n,}</code>

重複n次或更多次

<code>[c]</code>

比對單個字元c

<code>[a-z]</code>

比對a-z小寫字母的任意一個

<code>[a-zA-Z]</code>

比對a-z小寫字母或A-Z大寫字母的任意一 個

标記

<code>last</code>

相當于<code>Apache</code>的<code>[L]</code>标記,表示完成<code>rewrite</code>

<code>break</code>

本條規則比對完成即終止,不再比對後面的任何規則

<code>redirect</code>

傳回<code>302</code>臨時重定向,浏覽器位址會顯示跳轉後的<code>URL</code>位址,爬蟲不會更新<code>url</code>

<code>permanent</code>

傳回<code>301</code>永久重定向,浏覽器位址欄會顯示跳轉後的<code>URL</code>位址,爬蟲更新<code>url</code>

last

break

使用場景

一般寫在<code>server</code>和<code>if</code>中

一般使用在<code>location</code>中

<code>URL</code>比對

不終止重寫後的<code>url</code>比對

終止重寫後的<code>url</code>比對

<code>~</code>

執行一個正則比對,區分大小寫

<code>~*</code>

執行一個正則比對,不區分大小寫

<code>!~</code>

執行一個正則比對,區分大小寫不比對

<code>!~*</code>

執行一個正則比對,不區分大小寫不比對

<code>^~</code>

普通字元比對;使用字首比對。如果比對成功,則不再比對其他<code>location</code>

<code>=</code>

普通字元精确比對。也就是完全比對

<code>@</code>

定義一個命名的<code>location</code>,使用在内部定向時

<code>=</code>類型

<code>^~</code>類型表達式

正規表達式(<code>~</code>和<code>~*</code>)類型

正常字元串比對類型,按字首比對

通用比對(/),如果沒有其它比對,任何請求都會比對到

都能實作跳轉

<code>rewrite</code>是在同一域名内更改擷取資源的路徑

<code>location</code>是對一-類路徑做控制通路或反向代理,還可以<code>proxy_pass</code>到其他機器

執行<code>server</code>塊裡面的<code>rewrite</code>指令

執行<code>location</code>比對

執行標明的<code>location</code>中的<code>rewrite</code>指令

(<code>location =</code>完整路徑) &gt; <code>(location ^~</code>完整路徑) &gt; <code>(location ~*</code>完整路徑) &gt; (<code>location ~</code>完整路徑) &gt; (<code>location</code> 完整路徑) &gt; (<code>location /</code>)

(<code>location=</code> 目錄) &gt; (<code>location ^~</code>目錄/) &gt; (<code>location ~</code> 目錄) &gt; (<code>location ~*</code>目錄) &gt; (<code>location</code> 目錄) &gt; (<code>location /</code>)

配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用

不能廢除舊域名

從舊域名跳轉到新域名,且保持其參數不變

配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用

開啟兩台客戶機,分别檢視兩台用戶端IP位址,并在伺服器配置可以通路的IP位址

配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用

将域名<code>http://bbs.accp.com</code>下面的發帖都跳轉到<code>http://www.accp.com/bbs</code>,且域名跳轉後保持參數不變

在客戶機中測試通路

配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用

浏覽器通路<code>http://www.accp.com/100-(100|200)-100.html</code>跳轉到<code>http://www.accp.com</code>頁面

在客戶機中通路測試

配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用

通路<code>http://www.accp.com/upload/1.php</code>跳轉到首頁

配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用

通路一個具體的頁面跳轉到首頁

在測試機中測試通路

配置Nginx服務中Rewrite的應用
配置Nginx服務中Rewrite的應用