Apache 2.2 rewrite规则配置后根路径/访问不跳转返回404问题求助
问题原因
- 模块执行优先级冲突:
RedirectMatch属于mod_alias模块,而你后续配置的RewriteRule属于mod_rewrite模块,Apache中mod_rewrite的执行优先级高于mod_alias,因此根路径/的请求会先被mod_rewrite规则处理,根本不会触发你写的RedirectMatch规则。如果后续没有匹配的重写规则处理根路径请求,就会直接返回404。 - 502错误的原因:你尝试用
RewriteRule ^/$ ... [P]的配置中,[P]标志是代理转发而非重定向,会将请求通过Apache代理转发到目标的https://app1.abc.com地址,如果你没有开启对应的mod_proxy、mod_proxy_http、mod_ssl模块,或者目标站点拒绝代理转发的请求,就会返回502网关错误。 - 规则顺序问题:即使你用RewriteRule写根路径跳转,如果放在其他规则后面,也可能被前面的规则拦截导致不生效。
修复方案
- 删掉原来的
RedirectMatch ^/$ ...规则,改用mod_rewrite实现根路径跳转,放在所有重写规则的最前面,明确加[L,R=302]标志(如果是永久跳转改为R=301),不要加[P]标志:
# 放在所有Rewrite规则最前面 RewriteRule ^/$ https://app1.abc.com/page1/page2.html [L,R=302] # 原来的其他规则保持不变 RewriteCond %{REQUEST_URI} ^/folder1/folder2 RewriteCond %{REQUEST_URI} !^/(.*)\.(json|html) RewriteRule ^/(.*)$ http://app2.adobecqms.net/$1.html [P] RewriteCond %{REQUEST_URI} ^/analytics.txt RewriteRule ^/(.*)$ http://app2.adobecqms.net/page1/page2/page3/$1 [P]
- 检查模块开启情况:确认Apache已经开启
mod_rewrite、mod_proxy、mod_proxy_http模块,如果你有代理到https地址的需求还需要开启mod_ssl。 - 如果你是在
.htaccess文件中配置的规则,需要将根路径匹配规则改为RewriteRule ^$ https://app1.abc.com/page1/page2.html [L,R=302],因为.htaccess中RewriteRule匹配的路径会去掉前缀的/。 - 配置完成后重启Apache服务生效。
内容的提问来源于stack exchange,提问作者user2961454
相关产品推荐
相关产品推荐

