2015-05-15 5 views
0

На моем сайте я хотел бы, чтобы перенаправлять посетитель, которые говорят на итальянском (их языке браузер итальянский) к/это/и все другим языкам/ан/Htaccess определение языка эффективный код

я придумал следующий код:

#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

Вы можете комбинировать различные пути. Похоже, что здесь нет никаких причин для условия 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", сканеры также должны найти сайт на другом языке. Поскольку сайт находится на другом языке, вам не следует наказывать за «дублированный контент».

+0

Большое спасибо, вы разъяснили это для меня и сделали код намного чище –