Раньше всегда рекомендовалось использовать название рубрики для структуры постоянных ссылок WordPress (типа …../wordpress/perenapravlenie-strukturyi-kategoriya/). Считалось что, когда пользователь видит полный адрес страницы, ему проще сориентироваться. Кроме того поисковики подсвечивают ключевые слова в URL … Но в итоге такой адрес страницы стал создавать проблемы и я решил сменить /%category%/%postname%/ на /%postname%/
Так как до этого использовалась структура /%category%/%postname%/, было иногда трудно перенести пост из одной категории в другую после публикации, так как URL опубликованного поста имел название категории. Кроме того, в случае если пост принадлежал нескольким категориям, то название категории всегда выбиралось в алфавитном порядке в URL, а не из личных предпочтений автора.
Я решил изменить структуру на % postname % .
Итак не долго думая изменил настройки постоянных ссылок, но оказалось что сам WordPress не позаботился о редиректах на новые URL. В результате массовые ошибки 404 наших старых URL-адресов. А на сайт стоит множество ссылок!
Вариант 1
Попробовал я добавлять правила перенаправлениях в файл .htaccess . Но после добавления нескольких, я устал. Правил так много (столько, сколько постов), что это реальная проблема и отнимает много времени. Пример одной строчки кода:
redirect permanent /blog/general/goodbye-ie6-join-countdown-to-history/ http://site.ru/goodbye-ie6-join-countdown-to-history/
Если постов 100, то и строчек таких должно быть 100!
Вариант 2
Популярные плагины.
Я поставил плагин “Redirection”.
Выберите следующие параметры :
а) ” Перенаправление URL ” путем сопоставления ” только URL ”
б) URL Источник: /blog/general/(.* )
с) Целевой URL : / $ 1
d ) Регулярное выражение ( регулярное выражение ) : [ ✔ ] ( Это важная часть в противном случае регулярные выражения работать не будут )
Понятно, что название категорий подставляете свои.
Внимание! Если есть вложенные категории, то для них надо прописывать отдельные правила!
Я сделал только один экземпляр для каждой категории, и все наши старые ссылки были перенаправлены на наши новые ссылки. В общем-то проблема решена.
Но мне не нравится устанавливать так много плагинов … ? И чтобы избежать битых ссылок теперь мне пришлось бы держать этот плагин всегда включённым.
Вариант 3
Всё-таки я решил это сделать через .htaccess , потратил примерно 3 часа, много гуглил, в конечном счете пришёл к удовлетворительному решению .
Достаточно поставить этот код в файле .htaccess:
RewriteRule ^blog/general/(.*) http://domain.com/$1 [R=301,L]
или вот так:
RewriteRule ^blog/general/(.*) index.\php/$1 [R=301,L]
сразу после (важно!):
# BEGIN WordPress RewriteEngine On RewriteBase /
Всё отлично сработало!