我們的 nginx 配置為多個站點提供自己的子域。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ~^(?P<sub>. )\.(example1|example2)\.com$;
root /var/www/instances/$sub;
...
}
我想將一個特定的子域及其路徑重定向到不同的站點,但我不知道如何撰寫檢查。我需要檢查主機部分,然后檢查路徑來決定重定向應該在哪里著陸。
地圖看起來像這樣:
| 舊 URI | 新的 URI |
|---|---|
sub1.example1.com/wiki/0/$path |
newSub1.example1.com/wiki/0/$path |
sub1.example1.com/wiki/20/$path |
newSub2.example1.com/wiki/0/$path |
$path請求 URI 的其余部分在哪里
所有其他請求都sub1.example1.com應該像以前一樣作業。
uj5u.com熱心網友回復:
顯而易見的解決方案是拆分sub1.example1.com成一個單獨的server塊。正如您將在本檔案中看到的那樣server_name,具有確切名稱的 a 始終優先于server_name具有正則運算式的 a。
這意味著,有兩個server塊與幾乎相同的內容,但是這可以通過使用被減輕的include指令。
另外,您也可以測驗的值$host$request_uri用一個map指令。這效率較低,因為您將在每個站點中測驗 URL。
例如:
map $host$request_uri $redirect {
default 0;
~*^sub1.example1.com/wiki/0/(?<path>.*)$ //newSub1.example1.com/wiki/0/$path;
~*^sub1.example1.com/wiki/20/(?<path>.*)$ //newSub2.example1.com/wiki/0/$path;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ~^(?P<sub>. )\.(example1|example2)\.com$;
root /var/www/instances/$sub;
if ($redirect) { return 301 $scheme:$redirect; }
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/376067.html
