Проблема с WordPress - редирект 200 OK на главную вместо 301 на внутряки

F1
На сайте с 24.01.2012
Offline
64
#11

Еще одно уточнение - оба варианта от Gerga, рабочие, просто в первом варианте я допустил ошибку:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} page=561
RewriteCond %{QUERY_STRING} page=520
RewriteRule ^/?$ https://site.ru/detskiy-nevrolog/? [R=301,L]
</IfModule>

Как мне написали в личку (пользователь с ником Sitealert, спасибо Вам большое) нужно было ставить флаги [OR]

В итоге рабочее правило должно выглядеть так:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} page=561 [OR]
RewriteCond %{QUERY_STRING} page=520 [OR]
RewriteRule ^/?$ https://site.ru/detskiy-nevrolog/? [R=301,L]
</IfModule>

Так все работает отлично.

Как и вариант с:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^/?page=561$
RewriteRule ^/?$ detskiy-nevrolog/? [R=301,L]
</IfModule>

Единственный момент - оба правила работают одинаково, т.е. абсолютно одинаково.

Получается что урл вида:

site .ru/?page=561 редиректит на site .ru/detskiy-nevrolog/

А урл вида:

site .ru/?page=561#scroll редиректит на site .ru/detskiy-nevrolog/#scroll т.е. как будто это якорная ссылка на странице. Не идеально, но все равно неплохой вариант.

В идеале, конечно, хотелось бы чтобы любая абракадабра редиректила на site .ru/detskiy-nevrolog/

Если есть идеи как такое сделать - обещаю потестить и отписать по результату, ну а нет, то и этот вариант подойдет для склейки страниц из индекса.

Всем еще раз БОЛЬШОЕ СПАСИБО.

p.s. код вроде бы оформил как надо в этот раз, спасибо SeVlad.

IL
На сайте с 20.04.2007
Offline
435
#12
Gerga:
Так mod_rewrite полюбому будет загружаться. Х

чё это? Отнюдь.. Его можно как отключить на уровне сервера, так и исключить его использование при обработке .htaccess (а ещё и добавить AllowOverride, чтоб в поддиректориях .htaccess не дёргать)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Gerga
На сайте с 02.08.2015
Offline
94
#13
fackest1:

RewriteCond %{QUERY_STRING} page=561 [OR]
RewriteCond %{QUERY_STRING} page=520 [OR]
RewriteRule ^/?$ https://site.ru/detskiy-nevrolog/? [R=301,L]

У вас тут ошибка. Главная тоже будет редиретить на https://site.ru/detskiy-nevrolog/.

Можете так исправить:


RewriteCond %{QUERY_STRING} page=561 [OR]
RewriteCond %{QUERY_STRING} page=520
RewriteRule ^/?$ https://site.ru/detskiy-nevrolog/? [R=301,L]
fackest1:
ite .ru/?page=561#scroll редиректит на site .ru/detskiy-nevrolog/#scroll т.е. как будто это якорная ссылка на странице. Не идеально, но все равно неплохой вариант.

на стороне сервера такой якорь нельзя убрать.

ivan-lev:
чё это?

как вы тогда без mod_rewrite перенаправите ссылки вида /?page=([0-9]+) в обработчик, чтобы:

ivan-lev:
и построчное сравнение (поиск по ключу в массиве) на быстром php7.* ))

Может я что-то не улавливаю?

IL
На сайте с 20.04.2007
Offline
435
#14
Gerga:
как вы тогда без mod_rewrite перенаправите ссылки вида /?page=([0-9]+) в обрабочик, чтобы:

Они в index.php придут. В нём можно обработчик include-ть.

или без правок в index.php через prepend_file..

Gerga
На сайте с 02.08.2015
Offline
94
#15

ivan-lev, в WP index.php занят.

А разве WP не использует mod_rewrite?

mod_rewrite в любом случае будет загружен, хоть делайте редирект через хуки WP, хоть через что-то еще.

IL
На сайте с 20.04.2007
Offline
435
#16
Gerga:
ivan-lev, в WP index.php занят.

добавить строчку в index.php (или в config)

include './page-redirect-handler.php'; 

хоть и не самый лучший выход, но вполне рабочий (вполне возможно, что работать будет до какого-нибудь обновления)..

про альтернативный prepend - сказал.

Есть ещё вариант через обработчик 404 страницы отлавливать...

Но глобально.. смысл даже не в том, чтобы mod_rewrite не грузить совсем, а в том, чтобы 70 редиректов с двумя регулярками каждый перенести в 70 редиректов без регулярок. Хотя, .htaccess позволяет проводить построчное сравнение, но повально где надо и не надо используются регулярки..

Gerga
На сайте с 02.08.2015
Offline
94
#17
ivan-lev:
хоть и не самый лучший выход, но вполне рабочий (вполне возможно, что работать будет до какого-нибудь обновления)..

Да, но mod_rewrite все равно будет загружен :)


# BEGIN WordPress
<IfModule mod_rewrite.c>

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
IL
На сайте с 20.04.2007
Offline
435
#18
Gerga:
Да, но mod_rewrite все равно будет загружен

Я там чуть выше варианты привёл, как можно и без этого обойтись..

И да, то что wordpress вставил в .htaccess не запрещается редактировать (и даже удалять) при понимании ))

Gerga
На сайте с 02.08.2015
Offline
94
#19

ivan-lev, как? Покажите пожалуйста, я действительно буду благодарен.

---------- Добавлено 21.08.2019 в 14:42 ----------

Каким образом у вас получится исключить запросы /?page=([0-9]+) без mod_rewrite, чтобы это было действительно оптимально, но не "сделал - потому что хотелось сделать"?

F1
На сайте с 24.01.2012
Offline
64
#20
Gerga:
У вас тут ошибка. Главная тоже будет редиретить на https://site.ru/detskiy-nevrolog/.
Можете так исправить:

RewriteCond %{QUERY_STRING} page=561 [OR]
RewriteCond %{QUERY_STRING} page=520
RewriteRule ^/?$ https://site.ru/detskiy-nevrolog/? [R=301,L]

Да, всё верно, уже обнаружил, что даже страницы с дочерними разделами вида https://site.ru/detskiy-nevrolog/dochka.

редиректят на одну и ту же страницу - https://site.ru/detskiy-nevrolog/.

Решил использовать такой вариант:


RewriteCond %{QUERY_STRING} ^/?page=1033$
RewriteRule ^/?$ detskiy-nevrolog/? [R=301,L]
и
RewriteCond %{QUERY_STRING} ^/?page=1055$
RewriteRule ^/?$ detskiy-nevrolog/sdvg/? [R=301,L]

Всё корретно редиректит в таком случае.

Про якорь тоже понял, спасибо. Посмотрел, что в индексе ПС урлы без #scroll - так что для моей ситуации решение от Вас просто отличное.

Спасибо Вам большое Gerga еще раз.

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