htaccess配置int:tolower规则后多次重定向并跳转至根目录问题
问题根因
该问题是.htaccess上下文下的mod_rewrite路径解析规则差异导致的:
- .htaccess默认将重写目标识别为相对当前目录的路径,你直接使用
${lc:%{REQUEST_URI}}作为目标时没有声明为绝对路径,会触发路径拼接错误,最终跳转到根目录 - 部分Apache版本在.htaccess中直接调用
%{REQUEST_URI}作为重定向目标时,会丢失路径信息,触发循环重定向 - 你之前的主机可以正常运行,是因为不同Apache版本、不同全局rewrite配置对.htaccess下的路径解析逻辑存在差异
解决方法
将你.htaccess中的重写规则替换为以下内容即可:
RewriteCond %{REQUEST_URI} [A-Z] RewriteRule ^(.*)$ /${lc:$1} [R=301,L,QSA,NE]
规则说明
- 直接通过RewriteRule捕获当前请求的路径
$1,适配.htaccess的上下文解析逻辑,避免路径丢失 - 目标前加
/明确指定为站点根路径下的绝对路径,避免相对路径拼接错误 QSA标志保留原有请求的查询参数NE标志避免URL中的特殊字符被意外转义
测试注意事项
修改完成后务必先清空浏览器缓存再测试,301重定向为永久缓存,旧的错误规则会被浏览器长期缓存,会影响测试结果判断。
如果修改后仍然无法正常工作,可以检查Apache的错误日志,确认Virtualhost中定义的lc RewriteMap是否正常加载,无权限或配置语法错误会导致map调用失效。
内容的提问来源于stack exchange,提问作者Petar Kolev
相关产品推荐
相关产品推荐

