如何修改.htaccess实现指定子域名的/uk/路径重定向至/en/?
.htaccess重定向规则修改方案
你的原有规则无效的原因是:子域名属于HTTP请求的主机头(HTTP_HOST)部分,并非URL路径的一部分,而你只用RewriteRule去匹配路径,根本捕获不到子域名,所以规则不会触发。
正确的规则需要结合RewriteCond捕获子域名,再用RewriteRule匹配路径部分,具体代码如下:
RewriteEngine On # 捕获符合规则的子域名 RewriteCond %{HTTP_HOST} ^([a-z]{2}|ceb|haw|hmn|zh-CN|zh-TW)\.example\.com$ [NC] # 匹配路径中的/uk/开头部分,并重定向到对应子域名的/en/路径 RewriteRule ^uk/(.*)$ http://%1.example.com/en/$1 [R=301,L,QSA]
规则说明:
RewriteEngine On:开启URL重写引擎,这是所有重写规则的前提。RewriteCond %{HTTP_HOST} ...:匹配请求的主机域名,%1代表这里捕获到的子域名(比如de、ceb、zh-CN)。[NC]表示忽略大小写(可选,根据你的需求决定是否保留)。RewriteRule ^uk/(.*)$ ...:匹配以/uk/开头的路径,$1代表/uk/后面的所有内容(比如原路径是/uk/product/123,$1就是product/123)。[R=301,L,QSA]:R=301表示永久重定向;L表示这是最后一条匹配的规则;QSA表示保留原URL的查询字符串(比如原URL有?id=456,重定向后会保留在新URL中,不需要的话可以去掉)。
测试示例:
- 请求
de.example.com/uk/→ 重定向到de.example.com/en/ - 请求
ceb.example.com/uk/product→ 重定向到ceb.example.com/en/product - 请求
zh-CN.example.com/uk/?sort=price→ 重定向到zh-CN.example.com/en/?sort=price(如果保留QSA的话)
内容的提问来源于stack exchange,提问作者Marcin
相关产品推荐
相关产品推荐

