0

在我的网站上,我很想将说意大利语(他们的语言浏览器是意大利语)的访问者重定向到 /it/ 并将所有其他语言重定向到 /en/

我想出了以下代码:

#redirect to /it for italian lang
RewriteCond %{HTTP_HOST} ^domain\.net$ [NC]
RewriteCond %{REQUEST_URI} !/it/ [NC] #doesn't have /it in the url already
RewriteCond %{REQUEST_URI} !/en/ [NC] #doesn't have /en in the url already
RewriteCond %{REQUEST_URI} !/admin/ [NC] #we are not in the admin panel
RewriteCond %{HTTP:Accept-Language} ^it [NC] #browser language is italian
RewriteRule ^(.*)$ http://domain.net/it/$1 [L,R=301]

#redirect to /en for all other langs
RewriteCond %{HTTP_HOST} ^domain\.net$ [NC]
RewriteCond %{REQUEST_URI} !/it/ [NC] #doesn't have /it in the url already
RewriteCond %{REQUEST_URI} !/en/ [NC] #doesn't have /en in the url already
RewriteCond %{REQUEST_URI} !/admin/ [NC] #we are not in the admin panel
RewriteRule ^(.*)$ http://domain.net/en/$1 [L,R=301]

这样所有条件都被检查,如果语言是意大利语,他们会重定向到 /it 否则第二个块进入行动,他们会被重定向到英文版本。

我的第一个问题是:有更有效的方法吗?我的 htaccess 功能非常有限。

作为一个额外的问题:这会给搜索引擎优化带来问题吗?我猜所有爬取 domain.net 的机器人都会被重定向到英文版,然后找到意大利版的链接(这是一个标志图像)并爬取意大利版。这是对的吗?

4

1 回答 1

0

您可以组合不同的路径。似乎没有太多理由在这里设置 HTTP_HOST 条件。子域应该指向一个不同的目录,如果你想要的话www.domaindomain重定向应该出现在这些规则的前面。此外,由于您知道 url 中没有语言代码,因此您可以%{REQUEST_URI}在规则的重写部分中使用,从而使捕获组过时。这允许将字符串与 just 匹配^(字符串有一个起点)。因此,您可以将其简化为:

RewriteCond %{REQUEST_URI} !/(it|en|admin)/ [NC]
RewriteCond %{HTTP:Accept-Language} ^it [NC]
RewriteRule ^ http://domain.net/it%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_URI} !/(it|en|admin)/ [NC]
RewriteRule ^ http://domain.net/en%{REQUEST_URI} [R,L]

我认为 SEO 不会有问题,但我不是该领域的专家。只要有指向另一种语言的链接,并且该链接没有标有rel="nofollow",爬虫也应该找到另一种语言的网站。由于该网站使用不同的语言,因此您不应因“重复内容”而受到处罚。

于 2015-05-15T15:15:16.047 回答