旧域名重定向至子域名的.htaccess规则异常问题求助
问题排查与修复方案
首先咱们来拆解你遇到的问题核心:你误用了%{HTTP_HOST}变量——这个变量只存储请求的主机名(比如hkdcrandom.com或www.hkdcrandom.com),根本不会包含http://协议前缀。所以你写的!http://hkdcrandom.com$这个条件永远是成立的(因为主机头不可能带协议),反而导致规则逻辑混乱,再加上裸域名的服务器配置可能和www域名存在差异,才出现了访问裸域名无反应的情况。
修正后的.htaccess规则
直接替换你原来的规则,用下面这段:
RewriteEngine On # 匹配两种需要重定向的情况:非www主机,或未使用HTTPS RewriteCond %{HTTP_HOST} !^www\.hkdcrandom\.com$ [NC,OR] RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.hkdcrandom.com/blog/$1 [L,R=301]
规则逐行解释
RewriteEngine On:开启URL重写功能,这是所有重定向规则的基础。RewriteCond %{HTTP_HOST} !^www\.hkdcrandom\.com$ [NC,OR]:匹配所有不是www.hkdcrandom.com的主机(比如你的裸域名hkdcrandom.com),[NC]表示不区分大小写,[OR]说明和下一个条件是“或”的关系。RewriteCond %{HTTPS} off:匹配所有使用HTTP明文协议的请求(不管主机是哪个)。RewriteRule ^(.*)$ https://www.hkdcrandom.com/blog/$1 [L,R=301]:只要满足上面任意一个条件,就把请求永久重定向到目标地址。$1会保留原请求的路径内容(比如旧地址的/about会被带到新地址的/blog/about),[L]表示这是最后执行的规则,[R=301]是永久重定向标记,对SEO更友好。
额外注意事项
- 清除浏览器缓存:301重定向会被浏览器缓存,测试前一定要清空缓存或者用隐身窗口访问。
- 检查服务器配置:确保你的Apache服务器允许
.htaccess生效(需要在虚拟主机配置里设置AllowOverride All)。 - 裸域名绑定验证:确认服务器已经把
hkdcrandom.com裸域名正确绑定到和www.hkdcrandom.com相同的站点目录,避免因域名配置缺失导致无响应。
内容的提问来源于stack exchange,提问作者Mohsin Abbas
相关产品推荐
相关产品推荐

