Перенаправление в htaccess - это добавление каталога в новый URL;неправильно перенаправляет URL-адреса ExpressionEngine - PullRequest
0 голосов
/ 14 октября 2011

Я пытаюсь настроить правило перенаправления для нового сайта ExpressionEngine.

Я использую следующий код, размещенный в файле .htaccess моего сайта (последний раздел удаляет index.php из URL-адресов ExpressionEngine - это работает):

<IfModule mod_rewrite.c>
    RewriteEngine On

    RedirectMatch 301 ^/2010/example/*$ http://sub.domain.com/new-page/$1

    # Removes index.php from ExpressionEngine URLs
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

Перенаправление сортировки происходит, но URL, который я получаю, это:

http://sub.domain.com/new-page2010/example/

Я пробовал разные комбинации, и это заставляет меня взбираться на стену !! Любые подсказки, где я иду не так?

1 Ответ

1 голос
/ 17 октября 2011

Синтаксис директивы Apache RedirectMatch предполагает использование скобок в RegEx:

Предоставленное регулярное выражение сопоставляется с URL-путем, и если он совпадает, сервер заменяет любые совпадения в скобках в данную строку.

Использование RedirectMatch эквивалентно Redirect , но использует стандартные регулярные выражения вместо простого сопоставления префиксов.

Поэтому, исправляя ваш пример, действительная директива RedirectMatch будет выглядеть так:

RedirectMatch 301 ^/2010/example/(.*)$ http://sub.domain.com/new-page/$1

Вы можете задействовать всю мощь механизма переписывания Apache, используя вместо этого RewriteRule :

RewriteRule ^2011/example/(.*)$ http://sub.domain.com/new-page/$1 [R=301,L]

В зависимости от того, что вы хотите перенаправить & mdash; одна страница против всего подкаталога & mdash; вам может потребоваться изменить исходный путь URL в каждом примере.

...