.htaccess Htaccess使用QSA附加到查询字符串而不重定向

.htaccess Htaccess使用QSA附加到查询字符串而不重定向,.htaccess,mod-rewrite,url-rewriting,qsa,.htaccess,Mod Rewrite,Url Rewriting,Qsa,我正在尝试在子域级别将英文版本添加到我的网站,如下所示: en.mywebsite.com/business-name:这将显示子页面的英文版本 现在,我通过使用以下代码将子域附加到查询字符串中,以某种方式实现了这一点: Options -Indexes RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} . RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com [NC] RewriteC

我正在尝试在子域级别将英文版本添加到我的网站,如下所示:

  • en.mywebsite.com/business-name:这将显示子页面的英文版本
现在,我通过使用以下代码将子域附加到查询字符串中,以某种方式实现了这一点:

Options -Indexes

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.mywebsite\.com [NC]
RewriteCond %{HTTP_HOST} !^en\.mywebsite\.com [NC]
RewriteRule (.*) http://www.mywebsite.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^en\.mywebsite\.com
RewriteRule ^(.*)$ http://www.mywebsite.com/$1?language=en [QSA]
问题是,它是通过将用户重定向到www.mywebsite.com/business name?language=en来实现的,但我希望避免重定向,而是虚拟地传递“新生成的”查询字符串

这是可以实现的,还是QSA总是重定向


提前感谢。

尝试将上一条规则更改为:

RewriteCond %{HTTP_HOST} ^en\.mywebsite\.com
RewriteRule ^(.*)$ http://www.mywebsite.com/$1?language=en [QSA]

如果重写规则是到另一个域,它将始终重定向。en.example.com和www.example.com不一样。因此,无论R标志是否存在,apache都将重定向。如果不想重定向,可能必须使用P标志进行代理。
RewriteCond %{HTTP_HOST} ^en\.mywebsite\.com
RewriteCond %{QUERY_STRING} !language=
RewriteRule ^(.*)$ /$1?language=en [L,QSA]