0

让我解释一下这个问题。我们有 2 种语言的网站:fr & nl(荷兰语)。

当您到达我们的网站时,您将登陆 www.domain.be,如果您的浏览器语言设置为“nl”并且设置为“en”,它会将您(如以下代码中所见)重定向到荷兰语版本(因为荷兰人经常在他们的浏览器中使用这种语言)或将您留在 www.domain.be / fr.domain.be (这两个 url 都可以调用该网站 - fr...一个更多的是响应 nl ... 一)

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:Accept-Language} ^nl [NC]
RewriteRule ^$ http://nl.domain.be/ [L,R] 
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ http://nl.domain.be/ [L,R]
</IfModule>

在网站上,您可以通过单击 2 个链接(在右上角)来选择是否要访问 fr.domain.be 或 nl.domain.be。当您单击其中一个链接时,即使您想转到 fr 部分(在荷兰语部分导航时),htaccess 也会重定向您,并且在 nl 部分也是如此。

我该如何解决?我希望 htaccess 仅在您第一次访问该网站时重定向您,然后被停用并允许用户根据需要选择他的语言。

请你帮助我好吗?我在这两天...

4

2 回答 2

1

您只是重定向站点 base /,因此直接切换到另一个页面应该不是问题。

手动切换时不能只使用假索引页吗?像http://nl.domain.be/index

于 2012-05-30T18:50:40.290 回答
0

您可以为规则集创建多个条件,这样您就可以添加一个附加检查,即重定向仅在您不将 HTTP_REFERER 与您的域匹配时发生。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:Accept-Language} ^nl [NC]
RewriteCond %{HTTP_REFERER} !^*\.domain\.be/ [NC] 
RewriteRule ^$ http://nl.domain.be/ [L,R] 
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteCond %{HTTP_REFERER} !^*\.domain\.be/ [NC] 
RewriteRule ^$ http://nl.domain.be/ [L,R]
</IfModule>

这 !当 HTTP_REFERER 不匹配 url 模式,即“(通配符).domain.be”时,这意味着基本上你说的不是。

如果它们当前在您的站点上并尝试更改语言,这将阻止规则运行。

注意:我不在一个 apache 盒子附近来测试这个,所以我的语法可能是关闭的,但这应该会让你走上正确的道路。

于 2012-05-30T19:15:12.023 回答