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

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=123
  • R=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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:00:28