htaccess错误页面跳转异常:路径带斜杠与不带斜杠表现不一致
问题根源
你当前配置的重写规则存在两个逻辑缺陷,恰好匹配你遇到的异常表现:
- 所有
RewriteRule未添加[L]标记,且未判断重写目标的PHP文件是否真实存在:当访问example.com/test/时,第一条规则会直接将请求重写为test.php,如果站点根目录下不存在test.php文件,Apache会直接返回默认的「File not found」响应,不会触发你配置的自定义404页面。 - PHP版本更新后Apache的mod_rewrite模块处理优先级发生变化,此前可能未触发该逻辑漏洞。
修复方案
将.htaccess中的代码替换为以下内容即可:
<Files .htaccess> order allow,deny deny from all </Files> RewriteEngine On # 仅当对应的php文件存在时才执行重写 RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^([^/]+)/$ $1.php [L] RewriteCond %{DOCUMENT_ROOT}/$1/$2.php -f RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php [L] RewriteRule sample/(.*)/(.*)/$ /sample.php?$1=$2 [L] ErrorDocument 400 /400.php ErrorDocument 401 /401.php ErrorDocument 403 /403.php ErrorDocument 404 /404.php ErrorDocument 410 /410.php
验证逻辑
修改后再次访问example.com/test/,如果test.php不存在会直接跳转至你配置的自定义404页面,符合预期;如果对应PHP文件存在则正常加载页面,不影响原有正常功能。
内容的提问来源于stack exchange,提问作者Nita
相关产品推荐
相关产品推荐

