.htaccess 语言子域重定向

.htaccess language subdomain redirect

我正在尝试将我的语言变量 domain.com?lang=X 重定向到子域 X.domain.com

我有这个代码:

RewriteCond %{QUERY_STRING} (^|&)lang=(es|de|fi|tr)
RewriteRule ^(.*)$ https://%2.domain.com%{REQUEST_URI} [R=301,L]

不幸的是,当我想通过转到 domain.com/page?lang=es 更改语言时,我被重定向到 es.domain.com/page?lang=es 导致循环。

所以我尝试在 URL 的末尾添加一个问号,如下所示:

RewriteRule ^(.*)$ https://%2.domain.com%{REQUEST_URI}? [R=301,L]

以防止它在子域访问时添加 ?lang= 变量,但在这种情况下,语言不会改变,我最终得到 es.domain.com/page 英文.

我花了最后 4 个小时浏览 Whosebug 和其他网站,试图找到解决方案,但无济于事。我如何检测到我已经重定向到子域,然后在实际更改语言时忽略 ?lang= 变量?

请帮忙

谢谢。

能否请您尝试遵循 htaccess 文件顶部的 .htaccess 规则。 请确保在测试您的 URL 之前清除您的浏览器缓存。

RewriteEngine ON
##use THE_REQUEST variable to match condition here, with NC flag.
RewriteCond %{THE_REQUEST} \s/([^?]*)\?&?lang=(es|de|fi|tr)\s [NC]
RewriteRule ^ https://%2.domain.com%1 [NE,R=301,L]

为此您需要 2 条规则:

RewriteEngine On

# external redirect rule using THE_REQUEST variable
RewriteCond %{HTTP_HOST} ^domain\.com$ [NC]
RewriteCond %{THE_REQUEST} \s/+([^?]*)\?&?lang=(es|de|fi|tr)\s [NC]
RewriteRule ^ https://%2.domain.com/%1? [NE,R=301,L]

# internal rewrite rule to add lang parameter back
RewriteCond %{QUERY_STRING} !(^|&)lang= [NC]
RewriteCond %{HTTP_HOST} ^(es|de|fi|tr)\. [NC]
RewriteRule ^ %{REQUEST_URI}?lang=%1 [L,QSA]