htaccess子域名重写规则失效求助:无法映射sub.example.com到指定路径
解决sub.example.com重定向到example.com/works/sub的问题
首先得明确:你碰到的ERR_NAME_NOT_RESOLVED错误和.htaccess规则无关,本质是浏览器无法解析sub.example.com的IP地址——也就是说你的子域名还没完成正确的DNS配置,这是核心前提,域名解析不通的话,服务器上的任何重写规则都不会被触发。
第一步:先搞定子域名的DNS解析
这是必须先做的事,没它后面全白搭:
- 登录你的域名管理后台(比如Cloudflare、阿里云域名控制台这类平台),添加一条A记录:
- 主机记录填
sub - 记录值填你的服务器IP(和
example.com使用同一个IP即可)
- 主机记录填
- 等待DNS生效(快的话几分钟,慢的话可能几小时,取决于域名的TTL设置)
- 可以在命令行里敲
ping sub.example.com测试,能返回服务器IP就说明解析正常了
第二步:优化你的.htaccess重写规则
等解析正常后,把你的重写规则换成下面的配置,适配你的需求:
# 先确保RewriteEngine是开启的(如果之前没加就补上) RewriteEngine On RewriteBase / # 处理sub.example.com的重定向规则 RewriteCond %{HTTP_HOST} ^sub\.example\.com$ [NC] RewriteRule ^(.*)$ http://example.com/works/sub/$1 [L,QSA,R=301] # 保留你原来的其他规则 RewriteCond %{REQUEST_FILENAME} !-f #RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L]
规则细节说明:
[NC]:忽略域名的大小写,确保Sub.example.com这类写法也能被匹配到[QSA]:保留原请求的查询参数,比如sub.example.com?id=123会被重写到example.com/works/sub/?id=123R=301:标记为永久重定向,对SEO更友好;如果只是临时重定向可以换成R=302;要是想隐藏真实地址(做反向代理)可以用P,但得确保你的Apache服务器开启了mod_proxy模块
为啥你之前的规则没效果?
- 第一组规则里的
RewriteRule ^/(.*)$:在.htaccess文件中,RewriteRule匹配的路径是不带开头斜杠的,所以^/(.*)$永远匹配不到任何内容,应该改成^(.*)$ - 第二组规则本身逻辑没大问题,但因为解析失败,规则根本没机会被执行
第三步:检查服务器的基础配置
- 确认你的Apache服务器已经开启了
mod_rewrite模块(没开的话.htaccess规则不会生效) - 确保网站的虚拟主机配置里设置了
AllowOverride All,否则.htaccess文件的规则会被服务器忽略
做完这些步骤,再访问sub.example.com应该就能正常跳转到example.com/works/sub对应的路径了。
内容的提问来源于stack exchange,提问作者user5125586
相关产品推荐
相关产品推荐

