.htaccess对.html生效但对.php无效,求目录访问限制及重定向解决方案
解决.htaccess重定向对PHP文件无效的问题
核心原因分析
你当前的规则只在请求的文件或目录不存在时才会跳转到index.php。如果是访问不存在的PHP路径也没触发跳转,大概率是Apache的MultiViews功能在干扰——它会自动匹配相似的文件(比如请求/test时,Apache会自动找test.php或test.html),导致重写规则不生效。如果是访问存在的PHP文件没跳转,那是当前规则的正常逻辑,因为规则只针对不存在的资源。
分步解决
1. 先关闭MultiViews
在Options行里添加-MultiViews,这是解决多数PHP跳转失效问题的关键:
Options All -Indexes -MultiViews
2. 按需调整重写规则
若只想保留“仅不存在的资源跳转”逻辑:
保持原有的RewriteCond规则即可,关闭MultiViews后,不存在的PHP路径就能正常跳转到index.php了。若想所有请求都强制跳转到index.php(包括直接访问存在的PHP文件):
删掉判断文件/目录是否存在的条件,规则改成这样:RewriteEngine on RewriteRule ^.*$ /index.php [L,QSA]
3. 测试验证
修改完后测试几个场景:
- 访问不存在的路径(比如
/xxx.php),应该成功跳转到index.php - 访问目录(比如
/images/),会显示403禁止访问(符合你限制目录访问的需求) - 若用了强制跳转规则,访问存在的PHP文件也会跳转到index.php
完整可用的.htaccess示例(保留仅不存在资源跳转的逻辑)
Options All -Indexes -MultiViews <files .htaccess> order allow,deny deny from all </files> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /index.php [L,QSA]
内容的提问来源于stack exchange,提问作者Ariees Andromeda
相关产品推荐
相关产品推荐

