Apache服务器下子域名重定向至文章URL的.htaccess配置问题
解决Apache子域名重定向到对应文章URL的问题
咱先拆解下你当前.htaccess配置里的几个错误,正是这些问题导致了访问失败:
原配置的核心问题
- HTTP_HOST变量格式错误:
%{HTTP_HOST}只存储主机名(比如mypost.example.com),不包含https://协议前缀,你写的匹配规则完全抓不到想要的子域名部分。 - 捕获组逻辑颠倒:你想捕获的是子域名的前缀(比如
mypost),但原规则里的^(.*)$是捕获请求的URI路径,根本不是主机名的内容。 - 多余的符号和空格:配置里的引号和URL中的空格会让Apache解析出错,直接导致站点无法访问。
- 错误的标志使用:
[P]是用于反向代理的标志,而你需要的是外部重定向,应该用[R]系列标志。
正确的.htaccess配置
首先要确保前提:你的DNS已经配置了通配符记录(*.example.com指向服务器IP),且服务器有通配符SSL证书(否则子域名会出现SSL错误)。然后替换成以下配置:
RewriteEngine On # 匹配非主域名的子域名,捕获前缀到%1 RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.example\.com$ [NC] # 排除www和裸域名(避免误重定向主站) RewriteCond %1 !^(www|example)$ [NC] # 重定向到对应的文章URL,301为永久重定向(利于SEO) RewriteRule ^(.*)$ https://www.example.com/sub/%1 [R=301,L]
配置说明
- 第一条
RewriteCond:匹配所有以xxx.example.com格式存在的子域名,把子域名前缀(比如mypost)捕获到%1变量中,[NC]表示不区分大小写。 - 第二条
RewriteCond:排除www.example.com和example.com,避免主站被错误重定向;如果不需要排除裸域名,可以删掉这一行。 RewriteRule:不管子域名下请求的具体路径是什么,都重定向到https://www.example.com/sub/加上捕获到的子域名前缀,[R=301]表示永久重定向,[L]表示执行完这条规则后停止后续Rewrite处理。
额外注意事项
- 测试阶段可以把
[R=301]改成[R=302](临时重定向),避免浏览器缓存永久重定向规则影响测试。 - 修改配置后,一定要清空浏览器缓存再测试,否则可能会看到旧的缓存结果。
- 确认Apache已经启用了
mod_rewrite模块(大部分主机默认启用,如果没启用需要联系主机商或自己在配置中开启)。
内容的提问来源于stack exchange,提问作者nova
相关产品推荐
相关产品推荐

