You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mod_rewrite配置问题:子域名PHP转HTML跳转路径重复致404

解决子域名路径重复的.htaccess规则修改方案

核心问题分析

子域名test1.example.com的DocumentRoot指向/test1,但根目录的.htaccess规则在重定向时错误地将物理路径前缀/test1拼接到URL中,导致地址栏出现重复的test1路径段,最终触发404错误。

修改后的完整根目录.htaccess规则

# 启用mod_rewrite模块
RewriteEngine On

# 根据当前域名动态适配RewriteBase,确保URL路径正确映射
RewriteCond %{HTTP_HOST} ^(www|test1|test2)\.example\.com$ [NC]
RewriteRule ^ - [E=REWRITE_BASE:/]

# 1. 将PHP请求重定向到对应.html地址(地址栏显示.html后缀)
# 仅对实际存在的PHP文件生效,避免无效重定向
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^(.*)\.php$ [NC]
RewriteRule ^ %1.html [R=301,L,NE]

# 2. 将HTML请求内部解析为对应PHP文件(地址栏保持.html不变)
# 仅当对应的PHP文件实际存在时才转发,避免404错误
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^(.*)\.html$ [NC]
RewriteCond %{DOCUMENT_ROOT}%1.php -f
RewriteRule ^ %1.php [L]

关键修改点说明

  • 动态适配路径映射:通过匹配所有关联域名,统一设置RewriteBase为/,利用各域名已配置的DocumentRoot映射,确保URL中的根路径/直接对应到正确的物理目录,避免手动拼接物理路径前缀导致的重复问题。
  • 重定向规则优化:使用%1捕获请求路径中去掉.php后缀的部分,直接拼接.html作为重定向目标,保证URL相对于当前域名的根路径,不会引入多余的test1或test2路径段。
  • 添加存在性校验:通过%{REQUEST_FILENAME} -f和%{DOCUMENT_ROOT}%1.php -f两个条件,确保仅对实际存在的文件执行重定向和内部转发,避免无效请求触发错误。

额外注意事项

  • 若/test1、/test2目录下存在独立的.htaccess文件,请删除或注释其中的重写规则,避免与根目录规则冲突。
  • 测试前清空浏览器缓存,301重定向会被浏览器缓存,旧的错误规则可能干扰测试结果。

内容的提问来源于stack exchange,提问作者Se7enDays

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:40:37