为何根页面的htaccess RewriteRule代理规则无法生效?
问题原因
你遇到的根路径/代理失效问题,大概率是mod_dir模块的默认索引文件处理优先级高于RewriteRule导致的。
当访问网站根路径时,Apache会自动触发DirectoryIndex规则(默认查找index.html、index.php这类文件),这会把原始请求的REQUEST_URI从/修改为/index.html(如果存在对应文件),导致你写的RewriteCond %{REQUEST_URI} ^/$条件不再匹配,代理规则自然不会生效。
而/test/代理正常,是因为/test/目录下没有匹配DirectoryIndex的文件,mod_dir不会修改请求URI,RewriteRule能正常触发。
解决方案
方法1:用%{THE_REQUEST}匹配原始请求
%{THE_REQUEST}记录的是客户端发送的原始请求行,不会被mod_dir或其他模块修改,用它来匹配根路径请求更可靠:
RewriteCond %{THE_REQUEST} ^GET\ /\ HTTP/ RewriteRule ^$ /abc/ [P,L]
方法2:临时禁用根目录的DirectoryIndex
如果不需要根目录的默认索引文件,可以在根目录的.htaccess或httpd.conf中临时禁用:
DirectoryIndex disabled RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^$ /abc/ [P,L]
方法3:确保mod_proxy相关模块已加载
还要确认httpd.conf中已经加载了反向代理必需的模块:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
同时建议设置ProxyRequests Off,避免开放不安全的正向代理:
ProxyRequests Off
内容的提问来源于stack exchange,提问作者PbICb
相关产品推荐
相关产品推荐

