tfm
  • 0
Новичок

Изменение структуры постоянных ссылок — редиректы в htaccess ломают архивные ссылки

  • 0

Когда я начал вести свой блог, постоянные ссылки и следующая структура:

http://<domain>/%year%/%monthnum%/%day%/%postname%/

Некоторое время назад я изменил структуру постоянных ссылок http://<domain>/%postname%/ только на » «.

Чтобы справиться с внешними ссылками на старую структуру постоянных ссылок, я добавил следующую строку в свой файл htaccess:

RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4

Теперь проблема в том, что строка перенаправления разрывает ссылки на архив, например. » http://<domain>/2010/09/02 » перенаправляется на главную страницу вместо отображения сообщений от 2 сентября 2010 г.

Можно ли исправить директиву перенаправления в htaccess, или я не смогу съесть пирог и получить его тоже?

Share
  1. RedirectMatch Mod_Alias ​​не такой мощный, как Mod_Rewrite. Если у вас есть Mod_Rewrite на вашем хосте (например, Pretty Permalinks используют его), вы можете сделать перенаправление, только если URL-адрес не в формате ссылки архива.

    Для проверки на этот случай есть RewriteCond и для выполнения команды перенаправления есть RewriteRule... [R=301] директива.

    Пример на основе ваших данных:

    RewriteCond %{REQUEST_URI} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [NC]
    RewriteRule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://<domain>/$4 [R=301,L]
    

    Это не проверено, но я думаю, что это должно работать. Я использовал квантификатор ({2}), чтобы лучше указать, сколько чисел вы ожидаете. Кроме того, в RewriteCond я создал шаблон, который соответствует только 20.. и 19.. годам.

    Первая строка (условие RewriteCond ) проверяет не соответствие URL-адресу архива, и только в случае несоответствия будет выполнено правило для перенаправления. Это RewriteRule в основном делает то же самое, что и ваша RedirectMatch директива.

    • 0

Оставить ответ

You must login to add an answer.