未經允許不得轉載!最近發現有博主轉載我的文章,並沒有跟我打招呼,也沒有注明出處!!!!
熟悉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重定向的例子先說到這,這也是我實際遇到的,這兩種方式完美的滿足了我的需求。
二者的詳細用法,后續的文章會詳細講解。
文章首發於公眾號:編程大道
以及我的個人網站