Drupal multisite htaccess: переписать все языки на язык по умолчанию на одном дочернем сайте - PullRequest
0 голосов
/ 28 декабря 2011
  • У меня есть мультисайт Drupal 6 с двумя доменами (www.example.com и www.domain.com), которые совместно используют общий контент.

  • Домен example.com находится на трех языках (EN, FR, NL).Языки задаются префиксом пути (/ en, / fr, / nl).Другой домен domain.com только на одном языке (NL).

  • Проблема : во многих случаях domain.com отображается не на том языке, даже если префикс пути не указан. Каким-то образом он кажется по умолчанию ENхотя это не всегда так - поведение кажется не очень последовательным.

  • Решение (по крайней мере, я надеюсь): так как я 'Я не разработчик Drupal (я создал сайт у бывшего коллеги). Я понятия не имею, как это исправить в Drupal, поэтому я подумал, что лучший способ исправить это - добавить некоторые правила переписывания в .htaccess.

  • Я тоже не специалист по htaccess / regex и не могу заставить его работать.Вы можете найти мои текущие правила переписывания ниже, любая помощь или предложения приветствуются.

  • Некоторые примеры:

    • www.domain.com/fr/some-title необходимо переписать в www.domain.com/nl/some-title
    • www.domain.com/node/1975 необходимо переписать в www.domain.com/nl/node/1975

Это уже правила перезаписи:

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Я попытался добавить это:

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteRule ^/(.*)$ /nl/$1

и ожидал, что это просто добавит / nl / ко всем путям (таким образом, не будет полным решением, поскольку /fr/some-title станет /nl/fr/some-title) - однако,быстрый тест показывает, что:

  • /fr/some-title переписано в /nl/some-title (это то, что мне нужно, но не то, что я ожидал)
  • /some-titleне переписан

  • Вопрос : есть идеи, что может быть не так?Или это может быть вызвано другими (Drupal) настройками?Или есть лучший способ решить мою проблему?

  • Просто для полноты: живой веб-сайт www.cinemazuid.be

Ответы [ 2 ]

3 голосов
/ 28 декабря 2011

Если это правило

RewriteRule ^ / (. *) $ / Nl / $ 1

находится в вашем файле .htaccess, я удивлен, что оно работает какведущий / всегда удаляется, поэтому теоретически он никогда не должен совпадать ни с одним запросом.

Если вы хотите использовать язык по умолчанию NL для тех запросов, которые не указываютязыком, а затем добавьте следующие правила в начало вашего файла .htaccess перед любыми существующими правилами

#if request is for existing file or directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
#then stop processing
RewriteRule .* - [L]

#replace fr with nl. This rule
RewriteRule ^fr/(.*)$ /nl/$1 [L,R=301]

#if the request does not have a language of en or nl
RewriteCond %{REQUEST_URI} !^/(en|nl)/ [NC]
#redirect with nl as default language
RewriteRule .+ /nl%{REQUEST_URI} [L,R=301]

Если вы не хотите перенаправлять, просто отбросьте R=301

Iотредактированный код выше, чтобы заменить /fr/some-title на /nl/some-title/.Флаг L указывает mod_rewrite прекратить обработку дальнейших правил, что обычно является тем, что вам нужно, если только у вас нет другого правила, которое требует дальнейшей обработки текущего запроса.

0 голосов
/ 29 декабря 2011
#redirect /fr/* and /en/* to /*
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteRule ^(en|fr)/(.*)$ /$2 [R,L]

#internally rewrite /* to /nl/*
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteCond $1 !^nl/$ [NC]
RewriteRule ^(.*)$ /nl/$1

#drupal code
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...