如何用.htaccess将域名/子域名映射到目录/子目录且不修改浏览器URL?
.htaccess 域名/子域名目录映射配置方案
需求说明
实现域名、子域名到对应目录的内部映射,浏览器地址栏URL保持不变,具体规则如下:
- domain1.com/* → /domain1.com/www/*
- foo.domain1.com/* → /domain1.com/foo/*
- bar.domain1.com/* → /domain1.com/bar/*
- domain2.com/* → /domain2.com/www/*
- foo.domain2.com/* → /domain2.com/foo/*
- bar.domain2.com/* → /domain2.com/bar/*
当前配置问题
你提供的配置存在两个核心问题:
- 包含
R标记,会触发外部重定向,导致浏览器URL改变,不符合需求 - 正则分组和条件判断逻辑有漏洞,引发目录循环追加的问题
修正后的配置
RewriteEngine On RewriteBase / # 处理主域名映射到www子目录 RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)$ [NC] RewriteCond %{REQUEST_URI} !^/%1/www/ RewriteRule ^(.*)$ /%1/www/$1 [L,NE,QSA] # 处理子域名映射到对应子目录 RewriteCond %{HTTP_HOST} ^([^.]+)\.([^.]+\.[^.]+)$ [NC] RewriteCond %{REQUEST_URI} !^/%2/%1/ RewriteRule ^(.*)$ /%2/%1/$1 [L,NE,QSA]
关键调整说明
- 移除
R和P标记:仅保留内部重写规则,确保浏览器URL不发生变化 - 拆分规则逻辑:分别处理主域名和子域名,避免正则分组混淆,规则更易维护
- 防循环条件:通过
REQUEST_URI判断当前请求是否已经是目标路径,避免重复追加目录 - 保留必要标记:
NE确保特殊字符不被转义,QSA保留URL中的查询字符串,L终止后续规则执行
内容的提问来源于stack exchange,提问作者aN00Bis
相关产品推荐
相关产品推荐

