你真的了解nginx重定向URI?-rewrite和alias指令


未經允許不得轉載!最近發現有博主轉載我的文章,並沒有跟我打招呼,也沒有注明出處!!!!

熟悉Nginx的同學都知道Nginx可以用來做負載均衡和反向代理,非常好用。做前后端分離也是非常的方便。

今天我們就來說一下,用Nginx做前后端分離時如何做URI重定向?

什么是URI重定向?

就是說訪問某一個或者某一規則URI時由Nginx的配置來決定重定向到另外一個或一類URI。

有啥用呢?

其中一個作用就是可以將請求映射到真實目錄。具體啥意思呢?

比如我們的URL是

http://www.abc.com/ITwalking/page/index.html

而index.html在我們的系統目錄

D:/resources/ITwalking/page/

這時我們可以這樣配置location:

location /ITwalking {
  root D:/resources/;
}

用root這種方式配置的話,location后面的ITwalking是作為系統目錄的,

D:/resources/下要有/ITwalking/page這層目錄。

這種配置是沒問題的。

但假如我們的D:/resources/下直接就是page,

然后下面直接就是文件呢,中間沒有/ITwalking這層目錄,怎么辦呢?你可能會想,新建個ITwalking把page及其中的文件移動到里面,然后用上面的配置不就可以了嗎。

可以,但沒必要!

非常沒必要,因為我們的resources/page目錄可能是從git上clone的,如果我們新建目錄移動進去,那我們是不是修改了本地git倉庫,那我們提交代碼或更新時咋辦?再移出去?多麻煩啊。(因為我們請求后台必須要加/ITwalking的)

為了解決這個問題,我們可以用 Nginx 的 alias 指令或者 rewrite 指令。

1、alias指令用來重置當前文件的目錄,lacation后面的是虛擬目錄

location /ITwalking/ {
  #使用 nginx alias 指令
  alias D:/resources/;
}


這樣,當URL為

http://www.abc.com/ITwalking/page/index.html時,

會將此請求重定向到

D:/resources/page/index.html

此時的ITwalking是虛擬目錄,對此目錄的訪問重置到

D:/resources/page/

2、rewrite重定向,需要配合root指令一起使用

location /ITwalking/ {
  root D:/resources/page/;
  #使用 nginx rewrite 指令
  rewrite ^/ITwalking/(.*?)$ /$1 break;
}


這兩種效果是一樣的。

^/ITwalking/(.*?)$是正則,表示滿足這個正則的請求,都重定向到D:/resources/page/下,/$1重定向的地址,break終止匹配。

 

rewrite是針對http請求的,它里面的路徑是網址里面的地址,rewrite做的是地址間的轉換。


而root和alias是系統文件路徑的設置。
區別是,root用來設置根目錄,而alias用來重置當前文件的目錄。

 

關於rewrite和alias重定向的例子先說到這,這也是我實際遇到的,這兩種方式完美的滿足了我的需求。

二者的詳細用法,后續的文章會詳細講解。

文章首發於公眾號:編程大道
以及我的個人網站


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM