【问题标题】:Htaccess appending to query string with QSA without redirectHtaccess 使用 QSA 附加到查询字符串而无需重定向
【发布时间】:2016-01-11 08:00:35
【问题描述】:

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

  • 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总是重定向?

提前致谢。

【问题讨论】:

  • 如果重写规则指向另一个域,它将总是重定向。 en.example.com 和 www.example.com 不一样。因此无论是否存在 R 标志,apache 都会重定向。如果您不想重定向,您可能必须使用 P 标志进行代理。

标签: .htaccess mod-rewrite url-rewriting qsa


【解决方案1】:

尝试更改您的最后一条规则:

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

RewriteCond %{HTTP_HOST} ^en\.mywebsite\.com
RewriteCond %{QUERY_STRING} !language=
RewriteRule ^(.*)$ /$1?language=en [L,QSA]

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 2010-11-06
    • 2015-08-16
    • 2018-10-10
    • 2013-05-30
    • 2011-09-09
    • 2013-03-26
    • 1970-01-01
    • 2022-03-24
    相关资源
    最近更新 更多