Apache AH00124错误排查:.htaccess去PHP后缀配置引发重定向超限
排查AH00124内部重定向超限问题的方向
1. 修正重写规则的循环触发逻辑
你的第二个重写规则使用%{REQUEST_URI}.php作为目标,虽然加了L标志,但内部重定向后整个规则集会重新执行,容易触发意外循环。建议调整规则,避免依赖REQUEST_URI,改用更精准的匹配:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # 外部重定向:将带.php的请求转为无后缀形式 RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R,L,NC] # 内部重写:将无后缀请求映射到对应.php文件 RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L] </IfModule>
同时检查是否存在xxx.php.php这类重复后缀的文件,这类文件会导致规则反复触发重写。
2. 验证文件存在性判断的准确性
%{REQUEST_FILENAME}.php -f的判断依赖服务器对路径的正确解析,以下情况可能导致判断异常:
- 若网站不在Apache根目录,
RewriteBase /设置错误会导致REQUEST_FILENAME指向的路径失效,文件存在性判断失真,规则反复尝试重写。 - 服务器进程无权限读取某些
.php文件,导致-f判断为假,后续错误处理触发循环。 - 未开启
FollowSymLinks或SymLinksIfOwnerMatch配置,符号链接的文件存在性判断会出错。
3. 排查多.htaccess文件的规则冲突
如果网站子目录中也存在.htaccess文件,多个文件的重写规则可能叠加执行,引发意外循环。比如子目录的规则修改了RewriteEngine状态,或添加了与根目录冲突的重定向规则。
4. 开启mod_rewrite调试日志追踪重写过程
这是定位循环最直接的方法:
- 在Apache主配置或虚拟主机配置中添加:
LogLevel rewrite:trace6
- 重启Apache后,查看错误日志(通常路径为
/var/log/apache2/error.log),日志会记录每一次重写的匹配条件、规则应用步骤,能直接找到触发循环的具体请求和规则。
5. 检查特殊请求场景
某些特殊请求可能触发循环:
- 带查询参数的请求(如
/xxx.php?param=1),若参数导致路径解析异常,可能触发重复重定向。 - 针对目录的请求(如
/dir/),若dir.php存在,规则会将/dir/重写成/dir/.php(因REQUEST_FILENAME是目录路径),若服务器错误页配置不当,会触发循环。
内容的提问来源于stack exchange,提问作者cvanmeer
相关产品推荐
相关产品推荐

