04.29 16、Nginx-重寫與重定向

為了能夠在修改網站結構或域名後,避免造成網站中的鏈接或在其他網站中的外鏈失效,已經提高網站在搜索引擎的收錄量和排名等目的,通常會採用url重寫與重定向,在增強網站專業化的同時,為用戶提供更加舒適的使用體驗。

1、rewrite模塊的介紹

重寫與重定向功能是現在大多數Web服務器都支持的一項功能,相對於其他產品而言,Nginx中的rewrite模塊提供的功能在配置上更加靈活自由,可定製性非常高,它的實現方式簡單,只需要通過rewrite指令根據Nginx提供的全局變量或自定義的變量,結合正則表達式已經進一步處理的標識就可以完成url重寫或重定向。

2、rewrite實現重寫

rewrite指令基本語法:

rewrite regex replacement [flag];

flag可選參數值:

  • last:終止rewrite,繼續匹配其他規則;

  • break:終止rewrite,不再繼續匹配;

  • redirect:臨時重定向,返回的HTTP狀態碼為302;

  • permanent:永久重定向,返回的HTTP狀態碼為301;

當flag值為last或break時,表示當前的設置為重寫,當flag的值為redirect或permanent時表示重定向;

2.1、添加rewrite指令

16、Nginx-重寫與重定向

if與括號有空格,!-e與$request_filename有空格;

!-e用於判斷不存在指定的文件或目錄時,執行if塊內的語句,內置變量$request_filename表示當前請求的文件路徑;

^/.*用於匹配當前網站下的所有請求;

/default/default.html用於替換符合指定規則的請求;

if指令判斷符號:

  • =:判斷變量與內容相同;

  • !=:判斷變量與內容不等;

  • ~:區分大小寫正則匹配;

  • ~*:不區分大小寫正則匹配;

  • !~:區分大小寫正則不匹配;

  • !~*:不區分大小寫正則不匹配;

  • -f:判斷文件存在;

  • !-f:判斷文件不存在;

  • -d:判斷目錄存在;

  • !-d:判斷目錄不存在;

  • -e:判斷文件或目錄存在;

  • !-e:判斷文件或目錄不存在;

  • -x:判斷可執行文件;

  • !-x:判斷不可執行文件;

測試驗證:

在網站根目錄下創建default目錄,並在改目錄下編寫default.html文件:

16、Nginx-重寫與重定向

重啟訪問一個不存在的文件

16、Nginx-重寫與重定向

2.2、break和last標識的區別

在使用rewrite實現重寫時,需要注意flag可選參數值break和last的區別,前者在rewrite指令匹配成功後就不再進行匹配,而 後者在rewrite後會根據rewrite匹配的規則重新發起一個請求繼續進行匹配。

設置匹配規則:

16、Nginx-重寫與重定向

重啟訪問

16、Nginx-重寫與重定向

16、Nginx-重寫與重定向

16、Nginx-重寫與重定向

3、rewrite實現重定向

rewrite的重定向就是將用戶訪問的url修改為重定向的地址,只需將flag的可選參數值設置為redirect或permanent即可實現。

16、Nginx-重寫與重定向

利用set指令為變量$name賦值,$1表示符合正則表達式第一個字模式的值,子模式([0-9]+)匹配到的值;

用戶請求http://test.ng.test/img-數字.jpg時,重定向到http://test.ng.test/img/數字.jpg;

16、Nginx-重寫與重定向


分享到:


相關文章: