【问题标题】:htaccess redirect to a specific url on same domain (without looping)htaccess 重定向到同一域上的特定 url(不循环)
【发布时间】:2015-08-06 16:21:33
【问题描述】:

我真的希望你能帮助我(这让我发疯)。 我已经尝试了数十种设置,但似乎没有任何效果,谷歌搜索自己头晕并尝试了许多不同的设置,但这似乎都导致了循环或服务器错误。

这是需要发生的事情:

我有一个附加了多个域的站点。我需要的是,当有人通过“domain.co.uk”域访问该网站时,会重定向到正确的语言参数(以及其他参数)。

非常具体:通过“www.domain.co.uk”访问时,必须将访问者重定向到“www.domain.co.uk?lang=en&noredir=1&currency=3”

我已确保 www 出现在此:

RewriteCond %{HTTP_HOST} !^www.domain.co.uk$ [NC]
RewriteRule ^(.*)$ http://www.domain.co.uk/$1 [L,R=301]

问题是(我认为)在同一个域内重定向而不会导致循环。

我试过这样的东西,但没有结果:

RewriteCond %{HTTP_HOST} ^www.domain.co.uk$
RewriteRule ^$ http://www.domain.co.uk/?lang=en&noredir=1&currency=3 [L,R=301]

希望你能帮忙,

干杯!

【问题讨论】:

  • 因此您可能需要检查查询字符串是否已经不是您要重定向到的目标地址的字符串。添加另一个RewriteCond 可以帮助实现这一目标。
  • 我试过这样的事情: RewriteCond %{QUERY_STRING} !^"lang=en"$ 但它没有用。是我的语法错误还是什么?
  • 您的查询字符串不是"lang=en"。引号在那里做什么? ^$ 的意思是清楚的吗?
  • 我已经尝试过了,但它会导致服务器错误:RewriteCond %{HTTP_HOST} ^www.domain.co.uk$ RewriteCond %{QUERY_STRING} !^?lang=en&noredir=1&currency= 3$ 重写规则 ^$ domain.co.uk/?lang=en&noredir=1&currency=3 [L,R=301]

标签: apache .htaccess redirect


【解决方案1】:

这会导致循环:

RewriteCond %{HTTP_HOST} ^www.domain.co.uk$
RewriteRule ^$ http://www.domain.co.uk/?lang=en&noredir=1&currency=3 [L,R=301]

因为您只检查主机标头。每次重定向触发时,它都会以www.domain.co.uk 的主机标头返回服务器并再次重定向。您还需要检查查询字符串,并且仅在它与您发送的内容不匹配时才重定向:

RewriteCond %{HTTP_HOST} ^www.domain.co.uk$
RewrteCond %{QUERY_STRING} !lang=en&noredir=1&currency=3
RewriteRule ^$ http://www.domain.co.uk/?lang=en&noredir=1&currency=3 [L,R=301]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2023-02-01
  • 2014-08-13
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
相关资源
最近更新 更多