Перенаправление шаблона старых URL-адресов в Apache2 и Drupal - PullRequest
0 голосов
/ 09 июля 2011

mod_rewrite всегда был одним из моих самых слабых мест. Некоторое время я пытался найти решение этой проблемы, и многие ответы просто ссылаются на документацию mod_rewrite , которая мне не помогает. Я считаю, что моя проблема довольно проста, поэтому я надеюсь, что на этот раз кто-то не возражает дать мне халяву.

У меня есть несколько существующих правил mod_rewrite для Drupal:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Что, конечно, отлично работает; они стандартные правила Drupal.

Я хочу перенаправить запросы на

  /snippet/yyyy-MMM-dd/name-of-article

до

  /snippets/name-of-article

поэтому я изменил правила так:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^snippet/20[0-9]{2}-[a-z]{3}-[0-9]{2}/(.*)$ snippets/$1 [L,R=301] ### MY NEW RULE
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Мое новое правило работает должным образом и выполняет перенаправление правильно. Однако, похоже, что это влияет на запросы CSS и JS, что очевидно из-за отсутствия стилей и ошибок scriptin, g и 404 в журнале ошибок. Если я пытаюсь просмотреть файл CSS или JS напрямую, я получаю тот же HTML-вывод, что и при запросе родительского документа. Так что, очевидно, мое правило нарушено.

Я не знаю, почему это так сложно - кажется простым.

1 Ответ

0 голосов
/ 11 июля 2011

Хорошо, я кое-что узнал. RewriteCond влияет на RewriteRule, который им предшествует. Duh!

Это работает:

RewriteEngine on
RewriteBase /

RewriteRule ^snippet/20[0-9]{2}-[a-z]{3}-[0-9]{2}/(.*)$ snippets/$1 [L,R=301] ### MY NEW RULE

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
...