Редирект при смене структуры сайта wordpress

123
E
На сайте с 22.06.2016
Offline
45
#11
anru:
Посмотрел статью. Дело в том, что перенаправление с адресов формата /%post_id%.html на адреса формата /%postname%.html делает сам wordpress без проблем.

У меня WP отказался самостоятельно делать такое перенаправление.

Задача в другом!

Сделать доступными записи по старым адресам - после смены структуры сайта.

По новому адресу /%category%/%postname%.htm - будет сам wordpress показывать
А со старых адресов /%post_id%.html - надо сделать глобальный редирект на новые записи.

Я вам про перенаправление со старых адресов на новые и писал.

Как это вижу?

С адреса /?p=%post_id% wordpress сам определяет нахождение поста в любой структуре сайта.

Значит, надо сделать редирект со старых постов /%post_id%.html на /?p=%post_id%

и wordpress определит нахождение записи в новой структуре.

Чтобы не было двойного перенаправления, попробуйте для начала сделать внутреннее перенаправление на index.php?p=$1, как я написал ранее.

anru
На сайте с 20.09.2007
Offline
78
#12

Проблема решена!

Как и написал egos

Не знаю, почему раньше не работало - были какие-то глюки...

Как решил проблему?

Задача:

С структуры /%post_id%.htm сделать записи доступными после смены структуры блога

на /%category%/%postname%

Решение задачи:

1. В самом начале файла .htaccess пишем код, который предложил egos

RewriteRule ^(\d+)\.htm$ /?p=$1 [R=301,L]

2. В настройках блога "Постоянные ссылки" прописываем /%category%/%postname%

Администратор сайта VIP клуб - всё для бизнеса (http://15wmz.com/) Мой архив обучающего видео - 1000+ видеоуроков и видеокурсов (http://prodaga.com/)
E
На сайте с 22.06.2016
Offline
45
#13

Посмотрите мой последний пост. В установленной у меня версии WP работает и внутреннее перенаправление. Это более оптимальный вариант, т.к. не происходит двойное внешнее перенаправление:

RewriteRule ^(\d+)\.htm$ index.php?p=$1 [L]

Только для чистоты эксперимента не забудьте очистить кэш браузера.

anru
На сайте с 20.09.2007
Offline
78
#14
egos:
Посмотрите мой последний пост. В установленной у меня версии WP работает и внутреннее перенаправление. Это более оптимальный вариант, т.к. не происходит двойное внешнее перенаправление:
RewriteRule ^(\d+)\.htm$ index.php?p=$1 [L]

Только для чистоты эксперимента не забудьте очистить кэш браузера.

Сейчас задал вопрос в разделе "Оптимизация сайта" - структура для блога Wordpress.

Ожидаю ответ специалистов по оптимизации и продолжу эксперимент.

Думаю, что Ваш вариант будет работать.

P.S. Я просто писал в начале файла .htaccess предложенный Вами код - не надо больше никаких команд до и после кода?

E
На сайте с 22.06.2016
Offline
45
#15

Я на том же месте написал:


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(\d+)\.htm$ index.php?p=$1 [L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Можно еще добавить флаг NC и, возможно, QSA, сделать более точным регулярное выражение.

---------- Добавлено 06.11.2016 в 10:34 ----------

Если речь идет о внешнем перенаправлении, то его можно написать еще выше, сразу после директивы RewriteEngine.

anru
На сайте с 20.09.2007
Offline
78
#16
egos:

Можно еще добавить флаг NC и, возможно, QSA, сделать более точным регулярное выражение.

Если речь идет о внешнем перенаправлении, то его можно написать еще выше, сразу после директивы RewriteEngine.

Что значит "внешнее перенаправление"?

Как лучше?

Чтобы правильно работало и с поисковиками проблем не было...

E
На сайте с 22.06.2016
Offline
45
#17

Внешнее – это обычное перенаправление по протоколу HTTP.

Если вы сами напишете одно такое перенаправление в файле .htaccess, да еще WP сделает перенаправление после вашего, получится уже два. Если же вы напишете внутреннее, а WP его поймет и сделает только одно внешнее – это оптимально. Я ранее сомневался, что WP распознает внутреннее, но по крайней мере установленная у меня версия WP с этим справляется.

anru
На сайте с 20.09.2007
Offline
78
#18
egos:
Внешнее – это обычное перенаправление по протоколу HTTP.

Если вы сами напишете одно такое перенаправление в файле .htaccess, да еще WP сделает перенаправление после вашего, получится уже два. Если же вы напишете внутреннее, а WP его поймет и сделает только одно внешнее – это оптимально. Я ранее сомневался, что WP распознает внутреннее, но по крайней мере установленная у меня версия WP с этим справляется.

NC - отключает проверку регистра символов - учитывая то, что у нас только цифры в ID, флаг не актуален.

QSA - с этим флагом непонятно - добавляет исходные параметры запроса (query string) к замене. Можете пример параметров показать? Для чего нужен этот флаг?

E
На сайте с 22.06.2016
Offline
45
#19

Актуален. В исходном адресе не только ID.

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

anru
На сайте с 20.09.2007
Offline
78
#20
egos:
Актуален. В исходном адресе не только ID.

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

Значит, получаем следующий код

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(\d+)\.htm$ index.php?p=$1 [L,NC,QSA]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Правильно?

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий