如何修改.htaccess解决子域名404及HTTPS强制跳转问题?
解决子域名404问题并实现主站HTTPS强制跳转
我来帮你搞定这个问题,咱们先搞清楚现有配置的问题在哪里,再给出修正后的方案:
问题根源
你的现有.htaccess有两个核心问题:
- 没有区分主域名和子域名:原规则里的
RewriteCond %{HTTP_HOST}匹配了所有以example.com结尾的域名,包括子域名(比如docs.example.com),导致子域名的请求被强制重写到/Main-Site/目录,但子域名的文件根本不在这个目录里,所以触发404错误。 - 规则顺序不合理: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
相关产品推荐
相关产品推荐

