Nginx URL 重写
一、URL重寫介紹
和apache等web服務軟件一樣,rewrite的主要功能是實現URL地址的重定向。
Nginx的rewrite功能需要PCRE軟件的支持,即通過perl兼容正則表達式語句進行規則匹配的。
默認參數編譯nginx就會支持rewrite的模塊,但是也必須要PCRE的支持。
Rewrite功能是Nginx服務器提供的一個重要功能。
幾乎是所有的web產品必備技能,用于實現URL重寫。
URL重寫是非常有用的功能,比如它可以在我們在改變網站結構后,不需要客戶端修改原來的書簽,也不需要其他網站修改對我們網站的友情鏈接,還可以在一定程度上提高網站的安全性,能夠讓我們的網站顯得更專業。
二、應用場景
域名變更 (京東)
用戶跳轉 (從某個連接跳到另一個連接)
偽靜態場景 (便于CDN緩存動態頁面數據)
三、URL重寫原理
四、URL重寫
URL 模塊語法
set 設置變量 if 負責語句中的判斷 return 返回返回值或URL break 終止后續的rewrite規則 rewrite 重定向URLset指令 自定義變量
Syntax:set $variable value;Default:—Context:server, location, if將http://www.ayitula.com 重寫為 http://www.ayitula.com/baism:
location / {set $name baism;rewrite ^(.*)$ http://www.ayitula.com/$name;}if 指令 負責判斷
Syntax:if (condition) { ... }Default:—Context:server, location條件匹配
模糊匹配 ~匹配 !~不匹配 ~* 不區分大小寫的匹配
精確匹配 = !=
location / {root html;index index.html index.htm;if ($http_user_agent ~* 'Chrome') {break;return 403;#return http://www.jd.com;}}return 指令 定義返回數據
Syntax: return code [text];return code URL;return URL;Default: —Context: server, location, if location / {root html;index index.html index.htm;if ($http_user_agent ~* 'Chrome') {return 403;#return http://www.jd.com;} }break 指令 停止執行當前虛擬主機的后續rewrite指令集
Syntax: break;Default:—Context:server, location, if location / {root html;index index.html index.htm;if ($http_user_agent ~* 'Chrome') {break;return 403;} }rewrite指令 實現重寫url
rewrite <regex> <replacement> [flag];關鍵字 正則 替代內容 flag標記
flag:
last #本條規則匹配完成后,繼續向下匹配新的location URI規則
break #本條規則匹配完成即終止,不再匹配后面的任何規則
redirect #返回302臨時重定向,瀏覽器地址會顯示跳轉后的URL地址
permanent #返回301永久重定向,瀏覽器地址欄會顯示跳轉后的URL地址
重定向就是將網頁自動轉向重定向,permanent和redirect從定向的區別
301永久性重定向:新網址完全繼承舊網址,舊網址的排名等完全清零
301重定向是網頁更改地址后對搜索引擎友好的最好方法,只要不是暫時搬移的情況,都建議使用301來做轉址。
302臨時性重定向:對舊網址沒有影響,但新網址不會有排名
搜索引擎會抓取新的內容而保留舊的網址
permanent標志:永久重定向
www.ayitula.com 重寫為 www.jd.com server {listen 80;server_name www.ayitula.com;location / {rewrite ^/$ http://www.jd.com permanent;} }redirect標志:臨時重定向
域名跳轉 www.ayitula.com 重寫為 www.jd.com server {listen 80;server_name www.ayitula.com;location / {rewrite ^/$ http://www.jd.com redirect;} }break標志: 類似臨時重定向
域名跳轉 www.ayitula.com 重寫為 www.jd.com server {listen 80;server_name www.ayitula.com;location / {rewrite ^/$ http://www.jd.com break;} }last標志:
url重寫后,馬上發起一個新的請求,再次進入server塊,重試location匹配,超過10次匹配不到報500錯誤,地址欄url不變
last 一般出現在server或if中
根據用戶瀏覽器重寫訪問目錄
如果是chrome瀏覽器 就將 http://192.168.10.42/$URI重寫為 http://http://192.168.10.42/chrome/$URI實現 步驟 1)URL重寫 2)請求轉給本機locationlocation / { ..... if ($http_user_agent ~* 'chrome'){#^ 以什么開頭 ^a#$ 以什么結尾 c$#. 除了回車以外的任意一個字符#* 前面的字符可以出現多次或者不出現#更多內容看正則表達式 rerewrite ^(.*)$ /chrome/$1 last;}location /chrome {root html ;index index.html;} }總結
以上是生活随笔為你收集整理的Nginx URL 重写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nginx 下载限速
- 下一篇: Nginx静态资源站点——Nginx l