本文利用Nginx實現URL重寫,本文使用Nginx與靜態頁面配合重寫URL。html
結合本文場景,須要安裝Nginx。nginx
1.1 關於Linux系統安裝Nginx能夠參考個人文章---(傳送門)。正則表達式
URL重寫是指將一個URL請求從新寫成網站能夠處理的另外一個URL的過程。這樣說可能不是很好理解,舉個例子來講明一下,在開發中可能常常遇到這樣的需求,好比經過瀏覽器請求的http://localhost:8080/getUser?id=1,可是須要經過SEO優化等等緣由,須要把請求的地址重寫爲http://localhost:8080/getUser/1這樣的URL,從而符合需求或者更好的被網站閱讀。瀏覽器
當遇到這種請求的時候,就須要使用到UrlRewrite重寫或者使用一些網關路由,如SpringCloud的Gateway,Zuul,又或者是Nginx來實現這個功能。bash
本文介紹Nginx實現URL重寫。cookie
在Nginx中使用URL重寫須要使用到一個指令-----rewrite,其語法以下:學習
rewrite regex replacement [flag];
複製代碼
flag值爲以下四種,分別是:測試
例如:優化
server {
...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;
...
}
複製代碼
另外還能夠根據if來判斷,指令以下:網站
if (condition) { ... }
複製代碼
其中condition是條件,若是爲true,則執行大括號中的內容:
例如:
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;
}
複製代碼
本文例子只是將請求跳轉到本人的博客首頁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;
}
}
}
複製代碼
測試就比較簡單了,在瀏覽器訪問http://localhost:10000/about,會自動跳轉到https://www.dalaoyang.cn/about,如圖所示。
大部份內容都是參考自Nginx官網來學習的,官網的例子都很詳細。
參考自Nginx官網ngx_http_rewrite_module模塊官方API---傳送門。