Apache http server Location标签用上下文路径无法移除URL空参数如何解决
问题核心原因
<Location> 块内的 RewriteRule 匹配规则默认针对移除Location前缀后的相对子路径生效,你原配置中写死了绝对路径匹配规则 ^/reports$,在 /reports/ 上下文的Location块内永远无法命中,导致空参数移除规则完全不触发。
修复后配置
<Location /reports/> LogLevel alert rewrite:trace8 RewriteEngine On ProxyPass http://1.2.3.4:3000/ ProxyPassReverse http://1.2.3.4:3000/ RewriteCond %{QUERY_STRING} ^(.+?&)?[^=]+=(?:&(.*))?$ RewriteRule ^ %{REQUEST_URI}?%1%2 [R=302,NE,L] </Location>
关键修改说明
- 替换原硬编码的路径匹配和跳转目标,复用根路径配置中通用的
^ %{REQUEST_URI}?%1%2写法:%{REQUEST_URI}会自动带上你配置的上下文路径/reports/,不需要手动写死路径,后续上下文路径变更也不用调整重写规则 - 移除了无效的
RewriteBase /配置,该配置在你用REQUEST_URI作为跳转目标时不会生效,反而会引发路径匹配混淆
配置修改完成后执行 apachectl configtest 验证语法正确性,再执行 apachectl graceful 重载服务即可生效,验证时请提前清理浏览器旧的302缓存避免干扰。
内容的提问来源于stack exchange,提问作者Amit Sanghavi
相关产品推荐
相关产品推荐

