為了能夠在修改網站結構或域名後,避免造成網站中的鏈接或在其他網站中的外鏈失效,已經提高網站在搜索引擎的收錄量和排名等目的,通常會採用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指令
if與括號有空格,!-e與$request_filename有空格;
!-e用於判斷不存在指定的文件或目錄時,執行if塊內的語句,內置變量$request_filename表示當前請求的文件路徑;
^/.*用於匹配當前網站下的所有請求;
/default/default.html用於替換符合指定規則的請求;
if指令判斷符號:
=:判斷變量與內容相同;
!=:判斷變量與內容不等;
~:區分大小寫正則匹配;
~*:不區分大小寫正則匹配;
!~:區分大小寫正則不匹配;
!~*:不區分大小寫正則不匹配;
-f:判斷文件存在;
!-f:判斷文件不存在;
-d:判斷目錄存在;
!-d:判斷目錄不存在;
-e:判斷文件或目錄存在;
!-e:判斷文件或目錄不存在;
-x:判斷可執行文件;
!-x:判斷不可執行文件;
測試驗證:
在網站根目錄下創建default目錄,並在改目錄下編寫default.html文件:
重啟訪問一個不存在的文件
2.2、break和last標識的區別
在使用rewrite實現重寫時,需要注意flag可選參數值break和last的區別,前者在rewrite指令匹配成功後就不再進行匹配,而 後者在rewrite後會根據rewrite匹配的規則重新發起一個請求繼續進行匹配。
設置匹配規則:
重啟訪問
3、rewrite實現重定向
rewrite的重定向就是將用戶訪問的url修改為重定向的地址,只需將flag的可選參數值設置為redirect或permanent即可實現。
利用set指令為變量$name賦值,$1表示符合正則表達式第一個字模式的值,子模式([0-9]+)匹配到的值;
用戶請求http://test.ng.test/img-數字.jpg時,重定向到http://test.ng.test/img/數字.jpg;
閱讀更多 JavaCodingfarmer 的文章