Изменение структуры постоянной ссылки - перенаправления в HTACCESS разрывают архивные ссылки
-
16-10-2019 - |
Вопрос
Когда я начал с своего блога, постоянные ссылки и следующая структура:
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, или я не смогу есть торт и иметь его тоже?
Решение
Redirectmatch mod_alias не так мощный, как mod_rewrite. Если у вас есть Mod_rewrite на вашем хосте (например, симпатичные постоянные ссылки используют его), вы можете сделать перенаправление, только если 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]
Это не проверено, но я думаю, что это должно выполнять работу. Я использовал Quantifier ({2}), чтобы лучше указать, сколько чисел вы ожидаете. Рядом с этим в rewritecond я создал шаблон, который соответствует только 20 .. и 19 .. лет.
Первая строка (состояние, RewriteCond
) проверяет, чтобы не соответствовать архивам и только при том, если не соответствует, правило для выполнения перенаправления будет выполнено. А RewriteRule
в основном делает то же самое, что и ваш RedirectMatch
директива.