Nginx配置:如何实现And条件匹配?含Static路径需求
Nginx 配置「与」(And)条件的实现方法
在Nginx里并没有专门的and关键字来直接声明逻辑与条件,但我们可以通过两种简洁的方式实现你需要的多条件判断——同时满足「匹配^static/.*」和「不匹配^api/.*」时执行rewrite操作。
方法一:单个if指令中用&&组合条件
你可以在同一个if的条件表达式里,用&&连接两个判断规则,记得给整个表达式加上括号(避免Nginx解析出错),示例配置如下:
if ($request_uri ~ ^static/.* && $request_uri !~ ^api/.*) { rewrite ^ /index.html break; }
这里的规则细节:
~表示区分大小写的正则匹配,如果需要不区分大小写,替换成~*即可!~表示不匹配指定正则,对应的不区分大小写版本是!~*&&就是逻辑与,只有当两个条件同时成立时,才会执行内部的rewrite指令
方法二:嵌套if指令(更直观易读)
如果觉得单个if里的条件太紧凑,嵌套if是更直观的选择——先判断第一个条件,满足后再判断第二个条件,两层都通过才执行操作:
if ($request_uri ~ ^static/.*) { if ($request_uri !~ ^api/.*) { rewrite ^ /index.html break; } }
小提醒
注意$request_uri的格式:如果你的实际请求中,$request_uri是包含开头斜杠的(比如请求/static/js/app.js时,$request_uri的值是/static/js/app.js),那正则需要调整为^/static/.*和^/api/.*,不然会出现匹配失败的情况哦。
内容的提问来源于stack exchange,提问作者sof-03
相关产品推荐
相关产品推荐

