nginx 不支持 if 嵌套,也不允許在 if 中使用邏輯判斷,會(huì)報(bào)如下錯(cuò)誤:
nginx: [emerg] "if" directive is not allowed
當(dāng)業(yè)務(wù)需要多個(gè)條件判斷時(shí),可以借助中間變量來(lái)實(shí)現(xiàn)
如:我們的網(wǎng)站在 pc 端有多個(gè)子域名, 而移動(dòng)端只有一個(gè)域名,對(duì)應(yīng)關(guān)系如下:
- www.test.com --> m.test.com
- sub1.test.com --> m.test.com/sub1
- sub2.test.com --> m.test.com/sub2
- sub3.test.com --> m.test.com/sub3
要實(shí)現(xiàn)的效果:在移動(dòng)端訪問(wèn) pc 域名時(shí) 301 跳轉(zhuǎn)到對(duì)應(yīng)的移動(dòng)端域名
nginx 的重寫規(guī)則如下:
# 是否為移動(dòng)端
set $mobile 0;
if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) {
set $mobile 1;
}
# 獲取子域名
set $prefix 1;
if ($host ~* "sub1.test.com") {
set $prefix 2;
}
if ($host ~* "sub2.test.com") {
set $prefix 3;
}
if ($host ~* "sub3.test.com") {
set $prefix 4;
}
set $sign "${mobile}${prefix}";
if ($sign = 11) {
rewrite ^(.*) http://m.test.com$1 permanent;
}
if ($sign = 12) {
rewrite ^(.*) http://m.test.com/sub1$1 permanent;
}
if ($sign = 13) {
rewrite ^(.*) http://m.test.com/sub2$1 permanent;
}
if ($sign = 14) {
rewrite ^(.*) http://m.test.com/sub3$1 permanent;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。