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

如何修改.htaccess解决子域名404及HTTPS强制跳转问题?

解决子域名404问题并实现主站HTTPS强制跳转

我来帮你搞定这个问题,咱们先搞清楚现有配置的问题在哪里,再给出修正后的方案:

问题根源

你的现有.htaccess有两个核心问题:

  1. 没有区分主域名和子域名:原规则里的RewriteCond %{HTTP_HOST}匹配了所有以example.com结尾的域名,包括子域名(比如docs.example.com),导致子域名的请求被强制重写到/Main-Site/目录,但子域名的文件根本不在这个目录里,所以触发404错误。
  2. 规则顺序不合理:HTTPS跳转规则放在了目录重写之后,可能导致部分请求先被重写到目录再跳转协议,逻辑上不够顺畅,而且重复写了RewriteEngine On,完全没必要。

修正后的完整.htaccess配置

直接替换原文件内容为下面的代码即可:

RewriteEngine On

# 1. 强制主域名跳转到HTTPS(仅针对example.com和www.example.com)
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# 2. 主域名请求重写到Main-Site目录(排除子域名)
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/Main-Site/
RewriteRule ^(.*)$ /Main-Site/$1 [L]

# 错误文档配置(保留原内容)
ErrorDocument 206 /errors/206.html
ErrorDocument 301 /errors/301.html
ErrorDocument 302 /errors/302.html
ErrorDocument 400 /errors/400.html
ErrorDocument 401 /errors/401.html
ErrorDocument 403 /errors/403.html
ErrorDocument 404 /errors/404.html
ErrorDocument 408 /errors/408.html
ErrorDocument 500 /errors/500.html
ErrorDocument 501 /errors/501.html
ErrorDocument 503 /errors/503.html

关键修改说明

  • 规则顺序优化:把HTTPS跳转放在最前面,确保用户请求先完成协议转换,再处理目录重写,逻辑更清晰,也避免潜在的跳转冲突。
  • 主域名精准匹配:所有针对主站的规则都添加了^(www\.)?example\.com$的条件,意思是只有带www或不带www的主域名才会触发这些规则,子域名(比如docs.example.com)不会被匹配,自然不会被强制重写到/Main-Site/,也就不会出现404了。
  • 永久重定向标记:给HTTPS跳转的R标记加上了=301(永久重定向),这对SEO更友好,如果只是测试阶段,可以暂时改成R=302(临时重定向),确认没问题后再改回301。
  • 移除重复配置:删掉了重复的RewriteEngine On,只保留一个即可开启重写模块。

额外提示

如果你的子域名(比如docs.example.com)也需要强制HTTPS跳转,建议在子域名对应的独立文档根目录下单独创建一个.htaccess文件,添加类似的HTTPS规则,这样既不会影响主站配置,也能让每个域名的配置更独立清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:32:45