Nginx實現URL重寫
阿新 • • 發佈:2019-01-14
agent 場景 判斷 scheme cti 表達 ane code host
本文利用Nginx實現URL重寫,本文使用Nginx與靜態頁面配合重寫URL。
1.準備工作。
結合本文場景,需要安裝Nginx。
1.1 關於Linux系統安裝Nginx可以參考我的文章---(傳送門)。
2.什麽是URL重寫?
URL重寫是指將一個URL請求重新寫成網站可以處理的另一個URL的過程。這樣說可能不是很好理解,舉個例子來說明一下,在開發中可能經常遇到這樣的需求,比如通過瀏覽器請求的http://localhost:8080/getUser?id=1,但是需要通過SEO優化等等原因,需要把請求的地址重寫為http://localhost:8080/getUser/1這樣的URL,從而符合需求或者更好的被網站閱讀。
當遇到這種請求的時候,就需要使用到UrlRewrite重寫或者使用一些網關路由,如SpringCloud的Gateway,Zuul,又或者是Nginx來實現這個功能。
本文介紹Nginx實現URL重寫。
3.使用介紹
在Nginx中使用URL重寫需要使用到一個指令-----rewrite,其語法如下:
rewrite regex replacement [flag];
- regex :可以使用正則或者字符串來表示相匹配的地址。
- replacement:可以表示重定向的地址。
- flag :flag標誌的作用是用於控制當匹配到對應的rewrite規則後是否繼續檢查後續的rewrite規則。
flag值為如下四種,分別是:
- last:停止處理當前的rewrite指令集,而後通過重寫後的規則重新發起請求,瀏覽器地址欄URL地址不變。
- break:和break指令一樣,都是停止處理當前上下文中的其他重寫模塊指令。
- redirect:如果替換字符串不以“ http://”,“ https://”或“ $scheme” 開頭,返回帶有302代碼的臨時重定向,瀏覽器地址會顯示跳轉後的URL地址。
- permanent:返回301代碼的永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址。
例如:
server { ... rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last; rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last; return 403; ... }
另外還可以根據if來判斷,指令如下:
if (condition) { ... }
其中condition是條件,如果為true,則執行大括號中的內容:
- 使用“ =”和“ !=”運算符比較變量和字符串;
- 使用“ ~”(對於區分大小寫的匹配)和“ ~”(對於不區分大小寫的匹配)運算符,將變量與正則表達式進行匹配。正則表達式可以包含可供以後在$1.. $9變量中重用的捕獲。負操作符“ !~”和“ !~”也可用。如果正則表達式包含“ }”或“ ;”字符,則整個表達式應包含在單引號或雙引號中。
- 使用“ -f”和“ !-f”運算符檢查文件是否存在;
- 使用“ -d”和“ !-d”運算符檢查目錄是否存在;
- 使用“ -e”和“ !-e”運算符檢查文件,目錄或符號鏈接是否存在;
- 使用“ -x”和“ !-x”運算符檢查可執行文件。
例如:
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;
}
4.Nginx配置
本文例子只是將請求跳轉到本人的博客首頁http://www.dalaoyang.cn/,配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 10000;
server_name localhost;
#如果host不是dalaoyang.cn,則301到www.dalaoyang.cn中
if ( $host != "dalaoyang.cn" ){
rewrite ^/(.*)$ https://www.dalaoyang.cn/$1 last;
}
}
}
5.測試
測試就比較簡單了,在瀏覽器訪問http://localhost:10000/about,會自動跳轉到https://www.dalaoyang.cn/about,如圖所示。
6.總結
大部分內容都是參考自Nginx官網來學習的,官網的例子都很詳細。
參考自Nginx官網ngx_http_rewrite_module模塊官方API---傳送門。
Nginx實現URL重寫