在我的网站上,我喜欢将讲意大利语(他们的语言浏览器是意大利语)的访问者/ / /和所有其他语言重定向到/ 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]
通过这种方式检查所有条件,如果语言是意大利语,则会重定向到/ 否则,第二个块进入操作状态,它们将被重定向到英文版。
我的第一个问题是:有更有效的方法吗?我的htaccess功能非常有限。
作为一个额外的问题: 这可以创建SEO的问题吗?我猜所有抓取domain.net的机器人都将被重定向到英文版本,然后找到意大利版本的链接(它是一个标志图像)并抓取意大利版本。这是对的吗?
答案 0 :(得分:0)
您可以组合不同的路径。似乎没有太多理由在这里有HTTP_HOST条件。子域名应指向不同的目录,如果您需要,www.domain
到domain
重定向应出现在这些规则的前面。此外,由于您知道URL中没有语言代码,因此您可以在规则的重写部分中使用%{REQUEST_URI}
,从而使捕获组过时。这允许将字符串与^
匹配(字符串具有起始点)。因此,您可以将其简化为:
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"
,抓取工具也应该使用其他语言查找该网站。由于网站使用的是其他语言,因此不应因“重复内容”而受到处罚。