子目录htaccess配置非www跳转www丢失路径引发404问题求助
问题根因
- 子目录
.htaccess未显式开启RewriteEngine,重写规则默认不生效。同时mod_rewrite在子目录下运行时,默认会移除匹配路径的子目录前缀,你配置的^(.*)$仅能匹配到subdomain之后的路径内容,拼接域名后自然丢失了/subdomain/部分。 - 根目录的HTTP转HTTPS规则优先级更高,默认先执行根目录重写规则,没有特殊配置的情况下子目录的跳转逻辑会被打乱。
修复方案
修改子目录/subdomain/.htaccess配置
替换现有配置为以下内容即可:
RewriteEngine On # 声明当前规则的基础路径 RewriteBase /subdomain/ # 非www跳转www,保留完整路径 RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/subdomain/$1 [R=301,L]
如果需要统一走HTTPS,可直接将跳转目标改为HTTPS协议,避免二次跳转:
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/subdomain/$1 [R=301,L]
如果希望子目录规则优先于根目录规则执行,可在文件开头额外添加一行:
RewriteOptions InheritBefore
测试注意
301是永久重定向,会被浏览器长期缓存,修改配置后需要清空浏览器缓存或者使用无痕模式测试,避免旧缓存干扰测试结果。
额外优化建议
根目录的.htaccess中重复声明了两次RewriteEngine On,可以删除多余的一行,不影响功能但配置更规范。
内容的提问来源于stack exchange,提问作者EJBJane
相关产品推荐
相关产品推荐

