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

无需修改URL,将子域名映射到子目录(.htaccess实现)

解决.htaccess子域名到子目录的内部映射(保持URL不变)

我懂你要的是服务器端悄悄完成映射、浏览器地址栏完全不动的效果——也就是内部重写,而不是会跳转URL的外部重定向。你之前的规则用了绝对URL(http://example.com/%1/$1),这会触发浏览器跳转,自然就暴露了子目录路径。

下面是调整后的正确配置,完美满足你的两个需求:

RewriteEngine On
RewriteBase /

# 可选:排除主域名和www子域名(避免它们被错误映射)
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteCond %{HTTP_HOST} !^example\.com$

# 匹配子域名,内部映射到对应子目录
RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.example\.com$ [NC]
RewriteRule ^(.*)$ %1/$1 [L,NC,QSA]

规则说明:

  • 前两个RewriteCond是用来过滤主域名(example.com)和www.example.com的,如果你希望www也映射到public_html/www目录,可以直接删掉这两行。
  • %{HTTP_HOST} ^([a-z0-9-]+)\.example\.com$ 会精准捕获子域名部分(比如test.example.com里的test),把它存在%1这个变量里。
  • RewriteRule ^(.*)$ %1/$1 [L,NC,QSA] 是核心:它把用户请求的路径(比如test.example.com/post/123)内部映射到服务器上的test/post/123目录,浏览器地址栏全程显示test.example.com/post/123,完全不会暴露子目录结构。
    • [L]:告诉服务器处理完这条规则就停止,不用看后面的
    • [NC]:不区分大小写,比如Test.example.com也能正常映射到test子目录
    • [QSA]:保留原请求的查询参数,比如test.example.com?page=2会正确映射到test/?page=2,参数不会丢失

额外注意事项:

  1. 确保你的服务器配置里允许.htaccess生效,也就是在对应站点的配置中设置了AllowOverride All
  2. 子目录必须已经存在于public_html目录下(比如test.example.com对应public_html/test)
  3. 如果你的子域名需要支持下划线等特殊字符,把正则里的[a-z0-9-]+改成[a-z0-9-_]+就行

内容的提问来源于stack exchange,提问作者Chris John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:05:43