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

如何用.htaccess将子域名指向同主机子目录(不跳转)

.htaccess子域名指向对应子目录的正确规则配置

首先确认.htaccess文件的放置位置:必须放在网站根目录(即主域名example.com对应的服务器根目录,比如/public_html/),如果放在子目录里规则不会生效。

原规则的问题

你提供的规则存在两个关键问题:

  1. ^(?:live\.example\.com)?$这个正则表达式里的?表示匹配空值或live.example.com,会导致主域名也被错误匹配。
  2. 只处理了单个子域名,没有覆盖另外两个需求的子域名。

解决方案

根据需求,提供两种配置方式:

方式一:通用匹配(子域名与目录名完全一致时使用)

如果三个子域名(比如live、blog、store)和对应的子目录名完全相同,用这个规则可以一次性处理所有匹配项:

RewriteEngine On

# 匹配子域名前缀,对应到同名子目录
RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/%1/
RewriteRule ^(.*)$ /%1/$1 [L,NC]
  • 第一个条件捕获子域名的前缀(比如live),存储到%1变量中。
  • 第二个条件确保请求未指向对应子目录,避免循环重写。
  • 最后将请求重写到对应子目录,URL保持子域名不变。

方式二:指定子域名(更灵活,可自定义目录名)

如果子域名和目录名不一致,或者只想指定特定三个子域名,用独立规则组更清晰:

RewriteEngine On

# live.example.com 指向 /live/
RewriteCond %{HTTP_HOST} ^live\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/live/
RewriteRule ^(.*)$ /live/$1 [L,NC]

# blog.example.com 指向 /blog/
RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule ^(.*)$ /blog/$1 [L,NC]

# store.example.com 指向 /store/
RewriteCond %{HTTP_HOST} ^store\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/store/
RewriteRule ^(.*)$ /store/$1 [L,NC]

额外注意事项

  • 确保服务器已启用mod_rewrite模块,并且虚拟主机配置中设置了AllowOverride All(否则.htaccess规则不会被执行)。
  • 对应的子目录必须存在,且设置了正确的读写权限。
  • 测试前清空浏览器缓存,避免旧缓存干扰结果。

内容的提问来源于stack exchange,提问作者James Mattison

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:13:37