使用.htaccess移除php文件后缀时带尾斜杠URL报500错误如何解决
问题原因
你遇到的500错误本质是重写规则逻辑存在疏漏,当访问带尾部斜杠的路径/page/时,原规则会错误地将其拼接为/page/.php,触发Apache的内部重写死循环,最终返回500错误。
修复后的完整配置
# 移除PHP文件后缀 RewriteEngine On # 1. 把带.php的请求跳转到无后缀的路径 RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] RewriteRule ^ /%1 [NC,L,R=301] # 2. 适配带尾部斜杠的无后缀路径,匹配到对应php文件时先移除斜杠 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/(.+)/$ RewriteCond %{DOCUMENT_ROOT}/%1.php -f RewriteRule ^ /%1 [NC,L] # 3. 无后缀路径映射到对应php文件 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^([^/]+)$ $1.php [NC,L]
关键改动说明
- 移除了原配置中冗余的重复
RewriteEngine On声明,避免规则执行冲突 - 新增了尾部斜杠的适配逻辑:先判断带斜杠的路径去掉斜杠后是否存在对应PHP文件,存在的话先去除尾部斜杠再做映射,避免出现
/xxx/.php这类无效路径 - 增加了目录存在性判断
RewriteCond %{REQUEST_FILENAME} !-d,避免影响真实存在的目录访问 - 调整了PHP文件存在性的判断逻辑,用
DOCUMENT_ROOT做绝对路径校验,减少重写误判
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

