RewriteRule引发500内部服务器错误而非404问题求助
.htaccess 500错误(而非404)排查与修复
你的问题出在第二条重写规则上:当输入不存在的路径时,这条规则会把路径重写成对应的.php文件,但如果这个.php文件也不存在,服务器会反复执行重写逻辑,超出内部重写次数限制,最终返回500错误,而非预期的404。
具体修改方案
给第二条规则补充条件,确保只有对应的.php文件真实存在时才执行重写:
修改前的第二条规则块:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]*)/?$ $1.php [QSA,L]
修改后的规则块:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^/]*)/?$ $1.php [QSA,L]
原理说明
新增的RewriteCond %{REQUEST_FILENAME}.php -f会检查当前请求路径加上.php后缀后是否为真实存在的文件,只有满足该条件时才会触发重写。如果原路径和对应的.php文件都不存在,这条规则会直接跳过,服务器就能正常返回404未找到错误。
内容的提问来源于stack exchange,提问作者Péter Gergő
相关产品推荐
相关产品推荐

