Как перенаправить определенный шаблон URL, когда включены Drupal Clean URL? - PullRequest
0 голосов
/ 02 декабря 2010

У меня есть установка Drupal 5.23 с использованием чистых URL с Apache и модулем mod_rewrite. Я использую файл .htaccess для функциональности чистых URL со следующей конфигурацией:

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !=/favicon.ico
    RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

Я собираюсь отключить плагины локализации / интернационализации на веб-сайте, который изменит URL-адрес каждой отдельной страницы на веб-сайте с http://www.example.com/en/url-to-a-page на http://www.example.com/url-to-a-page (часть /en удаляется).

Я хотел бы добавить правило mod_rewrite, чтобы дать ответ HTTP 301 Redirect для всех входящих URL-адресов с частью /en в URL-адресе, чтобы они направлялись на правильную страницу.

Я попытался добавить следующие строки в мой файл .htaccess выше и ниже существующих правил, но в обоих случаях при посещении страницы с /en получен ответ HTTP 404 Not Found:

RewriteRule ^en/(.+)$ http://www.example.com/$1 [R=301]

Если я закомментирую существующие правила, мое правило работает просто отлично. Я также пытался добавить условие к правилу, но это, похоже, тоже не дало результата:

RewriteCond %{REQUEST_URI} =/en/*

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

В дополнение к тому, что предлагает sillygwailo, я бы порекомендовал вам убедиться, что ваш RewriteCond (необходимый, я думаю) действительно соответствует ..

из документов Apache:

= CondPattern '(лексикографически равно)
Обрабатывает CondPattern как простую строку и сравнивает его лексикографически с TestString. Истинно, если TestString лексикографически равен CondPattern (две строки в точности совпадают, символ за символом). Если CondPattern равен "" (две кавычки), это сравнивает TestString с пустой строкой.

Итак, он может соответствовать только URL-адресу, содержащему фактический '*' ..? Не уверен, но вы также можете попробовать это:

RewriteCond %{REQUEST_URI} ^/en/.*
1 голос
/ 02 декабря 2010

Это возникло у меня при написании всех моих пользовательских перенаправлений, и оказалось, что решением было добавить «L» в строку перенаправления.Дайте следующее при попытке:

RewriteRule ^en/(.+)$ http://www.example.com/$1 [L,R=301]

Обратите внимание на букву "L" в конце строки.Это, согласно документации Apache RewriteRule , означает «остановите процесс переписывания здесь и не применяйте больше правил перезаписи».

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