You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache mod_rewrite规则循环添加.php后缀致500错误求助

解决Apache mod_rewrite反复追加后缀导致500错误的问题

你的问题出在内部重写规则使用了%{REQUEST_URI}作为重写目标,当访问类似example.com/index/file这类不存在的路径时,规则会反复追加.php后缀,直到达到Apache的重写次数上限触发500错误。

问题原因

当请求/index/file时,第一次重写会将URI改为/index/file.php,但由于%{REQUEST_URI}会随重写更新为新的URI,下一次重写时会基于/index/file.php再次追加.php,变成/index/file.php.php,以此循环直到超过重写次数限制。

修复后的.htaccess配置

修改内部重写规则,使用反向引用匹配无后缀的请求路径,避免循环:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

# External Redirect - 移除已有的.html/.php后缀
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R=302,L,NE]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L,NE]

# Internal Redirect - 仅对无后缀的请求尝试追加.html/.php
# 检查请求路径不是真实目录,且对应的.html文件存在
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^.]+)$ $1.html [L]

# 检查请求路径不是真实目录,且对应的.php文件存在
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^.]+)$ $1.php [L]

# Error Documents
ErrorDocument 403 /errors/403.php
ErrorDocument 404 /errors/404.php
ErrorDocument 500 /errors/500.php

关键修改说明

  1. 添加RewriteCond %{REQUEST_FILENAME} !-d:确保请求的路径不是真实目录,避免对存在的目录误处理。
  2. 使用^([^.]+)$匹配无后缀的请求URI,通过反向引用$1拼接后缀,替代原来的%{REQUEST_URI},防止循环追加。
  3. 仅当对应的.html或.php文件真实存在时才执行重写,不存在的路径会直接触发404错误。

内容的提问来源于stack exchange,提问作者EthanBlaisAlarms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:25:59