Nginx配置rewrite规则隐藏URL页面名称不生效如何解决
配置失效原因
你当前的配置有两个核心逻辑错误,导致规则完全无法命中目标请求:
location = /是精确匹配规则,仅当访问域名根路径https://super30.net/时才会进入这个配置块,你需要处理的/999999这类路径根本不会命中该location。- 规则内的rewrite正则
^/referal/(.*)$仅匹配/referal/xxx格式的路径,和你需要捕获的/数字uid路径完全不匹配,即使location匹配范围正确也拿不到uid参数。
可用配置方案
直接在server块内添加如下location规则即可,注意保留你原有的站点配置、PHP解析配置不要改动:
# 匹配根路径下纯数字格式的请求(对应/999999这类URL) location ~ ^/(\d+)$ { rewrite ^/(\d+)$ /referal.php?uid=$1 last; }
注意:如果你的uid可能包含字母、下划线等非数字字符,可以把正则调整为
^/([a-zA-Z0-9_]+)$,不要直接用(.*)这类全匹配规则,否则会误拦截站点下静态资源、其他正常页面的请求。
生效操作
配置修改完成后,先执行nginx -t校验配置语法是否正确,确认无报错后执行nginx -s reload重载Nginx配置即可生效。
内容的提问来源于stack exchange,提问作者Asesha
相关产品推荐
相关产品推荐

