NGINX rewrite规则调整:仅支持/blog/blog-slug格式路径访问
修改方案
原有配置的正则规则^/blog(/?.*)$匹配逻辑过于宽松,只要请求路径前缀为/blog,就会把后面所有路径片段直接透传给上游服务,所以/blog/blog/blog-slug会被转换为/blog/blog-slug传给上游,才会出现两类路径都能访问的情况。
按照需求仅支持/blog/blog-slug格式访问,修改后的配置如下:
location /blog/ { # 拦截所有 /blog/blog/ 开头的非法路径,可根据需求替换为301跳转或403 location ~ ^/blog/blog/ { return 404; } rewrite ^/blog(/?.*)$ $1 break; proxy_pass http://1.10.4.204/; }
可选更严格配置
如果你需要完全限制/blog/下只能有单级路径(不允许任何类似/blog/xxx/yyy的多级路径访问),可以直接调整rewrite规则,不需要额外加嵌套location:
location /blog/ { # 仅匹配单级slug的路径,多级路径会直接返回404 rewrite ^/blog/([^/]+)/?$ /$1 break; proxy_pass http://1.10.4.204/; }
修改配置后执行nginx -s reload重载即可生效。
内容的提问来源于stack exchange,提问作者Nilesh Mistry
相关产品推荐
相关产品推荐

