Переписать правило для применения кода языка по умолчанию в URL - PullRequest
2 голосов
/ 10 февраля 2012

Я использую блог WP с qtranslate. Это позволяет мне создавать сообщения на нескольких языках.

1. Пример URL без qtranslate:

www.mysite.com / post1

2. Пример URL с локализованным контентом:

www.mysite.com / ru / post1 (английский - мои настройки по умолчанию и резерв)

www.mysite.com / де / post1

К сожалению, поисковые системы и т. Д. До сих пор помнят мои старые ссылки (1.), и они все еще доступны. Так что «www.mysite.com/post1» теперь показывает мой английский контент без перенаправления. Но то, что должно сделать, - это 301 пользователям на www.mysite.com/en/post1".

Так что теперь мне нужно правило, которое в основном проверяет наличие / en / post1 или / de / post1 в URL и в противном случае перенаправляет на запасной вариант / ru / post1 URL. Есть одно исключение, потому что "/ shop " является реальным подкаталогом и не нуждается в предшествующей языковой информации.

- ОБНОВЛЕНИЕ -

Я сделал это !!! Это было действительно весело, но мне потребовалось немало времени, чтобы понять.

RewriteRule ^$ en [R=301,L]
RewriteRule ^([a-z]{2})/{1}$ $1 [R=301,L]
RewriteRule ^([a-zA-Z0-9\-\_]{3,})(/|$)$ en/$1 [R=301,L]

Возможно, есть лучшие способы сделать это, но это помогает. Спасибо всем за первоначальную помощь!

Ответы [ 3 ]

1 голос
/ 10 февраля 2012

Вы пытались использовать универсальный RewriteRule и использовать RewriteConds для исключения случаев, когда вы не хотите, чтобы он переписывал?

Это будет что-то вроде:

RewriteCond %{REQUEST_URI} !^/shop(/|$)
RewriteCond %{REQUEST_URI} !^/(en|de)(/|$)
RewriteRule ^(.*)$ /en/$1 [R=301]

Но согласно предложению Камило, вы можете изменить эту среднюю линию на

RewriteCond %{REQUEST_URI} !^/[a-z]{2}(/|$)

, если вы можете быть уверены, что ваши постоянные ссылки на посты будут содержать не менее трех символов (я не достаточно знаком с WordPress, чтобы быть уверенным, что это возможно).

0 голосов
/ 11 февраля 2012

Я сделал это !!!Это было действительно забавно, но мне потребовалось довольно много времени, чтобы понять.

RewriteRule ^$ en [R=301,L]
RewriteRule ^([a-z]{2})/{1}$ $1 [R=301,L]
RewriteRule ^([a-zA-Z0-9\-\_]{3,})(/|$)$ en/$1 [R=301,L]

Возможно, есть лучшие способы сделать это, но это помогает

- ОБНОВЛЕНИЕ, которое включает поддержку дольшеURL ---

RewriteRule ^([a-zA-Z0-9\-\_]{3,}(/|$).*)$ en/$1 [R=301,L]
RewriteRule ^(.+[^/])/$ http://%{HTTP_HOST}/$1 [R=301,L]
0 голосов
/ 10 февраля 2012

Как насчет использования метаканонического?

Как это:

<link rel="canonical" href="http://www.example.com/product.php?item=swedish-fish" />

Подробнее: http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...