如何配置htaccess实现所有域名泛子域名自动跳转至同名子文件夹
问题原因
你编写的^([^.]+)\.(.*)正则规则会匹配所有包含至少1个点的域名,包含仅由两段组成的根域名(例如domain.cz),此时会错误将domain识别为子域名、cz识别为根域名部分,最终触发异常跳转。
修复方案
首先保证规则执行顺序:先执行移除www.的规则,再执行泛子域名跳转规则,避免带www的域名匹配异常。
将泛子域名跳转规则修改为如下内容即可:
RewriteCond %{HTTP_HOST} ^([^.]+)\.([^.]+\..+)$ RewriteRule ^(.*)$ http://%2/%1/$1 [L,R,NC,QSA]
上述正则要求捕获的根域名部分%2必须至少包含1个点,也就是整个请求域名至少由3段组成,仅会匹配带一级子域名的地址(例如sub.domain.cz,此时%1=sub、%2=domain.cz),不会匹配仅两段的根域名,彻底解决根域名跳转异常的问题。
测试规则生效无异常后,可以将R改为R=301实现永久跳转,避免临时跳转的性能损耗。
特殊场景适配
- 如需支持多级子域名跳转(例如
a.b.domain.cz跳转至domain.cz/a/b/xxx),可以调整正则捕获逻辑实现 - 如需适配
.co.uk这类二级后缀的根域名,可在规则中补充后缀匹配判断即可
内容的提问来源于stack exchange,提问作者Jase Wolf - theythem
相关产品推荐
相关产品推荐

