通配符子域名下.htaccess主域与子域文件指向配置求助
解决方案
先修正现有规则里的错误,再添加子域名路由逻辑,最终的.htaccess配置如下:
RewriteEngine on # 强制HTTPS:主域名跳转到www版本,子域名保留原主机名 RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^test\.com$ [NC] RewriteRule ^(.*)$ https://www.test.com/$1 [L,R=301] RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^(?!www\.)(.+)\.test\.com$ [NC] RewriteRule ^(.*)$ https://%1.test.com/$1 [L,R=301] # 移动端路径跳转 RedirectMatch 301 ^/m/$ https://www.test.com/ RedirectMatch 301 ^/mobile/$ https://www.test.com/ # 子域名路由:匹配非www的两位字母子域名,指向对应语言文件 RewriteCond %{HTTP_HOST} ^(?!www\.)([a-z]{2})\.test\.com$ [NC] RewriteRule ^$ %1.php [L] # 数字路径路由 RewriteRule ^([0-9]+)$ index.php?query=$1 [NC,L] # 搜索页面路由 RewriteRule ^search\.html$ search.php [NC,L]
关键调整说明
- 修正原规则里的拼写错误:
HTTPS_HOST改为HTTP_HOST,否则HTTPS跳转规则会失效 - 拆分HTTPS跳转逻辑:避免把子域名强制跳转到www主域名,子域名会直接跳转至自身的HTTPS版本
- 子域名匹配规则:
^(?!www\.)([a-z]{2})\.test\.com$专门匹配两位字母的子域名(如ru、de),根路径请求会直接指向对应的ru.php/de.php;如果需要子路径也映射到该文件,可把RewriteRule ^$ %1.php [L]改成RewriteRule ^(.*)$ %1.php/$1 [L] - 完善原有数字路由规则:添加
$避免部分匹配,加上L标记保证规则执行顺序正确
内容的提问来源于stack exchange,提问作者Harsh Sharma
相关产品推荐
相关产品推荐

