nginx怎么實(shí)現(xiàn)if嵌套

nginx 不支持 if 嵌套,也不允許在 if 中使用邏輯判斷,會(huì)報(bào)如下錯(cuò)誤:

nginx: [emerg] “if” directive is not allowed

當(dāng)業(yè)務(wù)需要多個(gè)條件判斷時(shí),可以借助中間變量來實(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)端訪問 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; }

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享