.htaccess将.html重定向到.php失效问题排查
问题原因及解决办法
核心原因及对应修复方案
.htaccess权限未开启
AMPPS默认Apache配置里,站点目录的AllowOverride可能设为None,导致.htaccess里的规则完全不生效。
修复:打开AMPPS的Apache配置文件(/Applications/AMPPS/apache/etc/httpd.conf),找到对应站点的<Directory>配置段,把AllowOverride None改成AllowOverride All,重启Apache服务。指令模块冲突/配置冗余
你写了RewriteEngine On(属于mod_rewrite模块),但用的是mod_alias的Redirect指令,若AMPPS里mod_alias未启用,规则就会失效。
修复:检查httpd.conf里是否有LoadModule alias_module modules/mod_alias.so,如果前面有#注释就去掉,重启Apache;或者直接改用mod_rewrite的规则替代Redirect,示例:RewriteEngine On RewriteRule ^page_cats.html$ https://www.example.com/page_cats.php [R=301,L] RewriteRule ^dogs_img.html$ https://www.example.com/dogs_img.php [R=301,L]路径或域名不匹配
- 如果本地测试用的是
localhost或自定义本地域名(比如example.test),但规则跳转目标是https://www.example.com,浏览器可能因跨域或域名不匹配拦截跳转,或者实际访问路径和规则里的/page_cats.html不对应(比如站点在子目录下)。
修复:本地测试时,跳转目标改用本地域名,比如http://localhost/page_cats.php;若站点在子目录,规则里要加上子目录路径,比如/subdir/page_cats.html。 - .htaccess文件未放在站点根目录(即Apache配置的
DocumentRoot指向的文件夹),规则无法匹配请求路径。
修复:把.htaccess移到站点根目录下。
- 如果本地测试用的是
浏览器缓存干扰
浏览器可能缓存了旧的HTML页面,导致测试时看不到跳转效果。
修复:用浏览器隐私模式访问,或手动清除浏览器缓存后再测试。
内容的提问来源于stack exchange,提问作者Nicolaesse
相关产品推荐
相关产品推荐

