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

1 2345 6
IL
На сайте с 20.04.2007
Offline
435
#21
Gerga:
/?page=([0-9]+)

они по умолчанию будут адресованы в соответствии с настройкой DocumentIndex (в конфиге Apache, который, опять же в зависимости от настроек можно переопределить в .htaccess), в котором, (как правило) в том числе указывается index.php (наряду с index.html, index.htm и т.д.)

Т.е. запросы на /?page=***.. можно обработать

а) добавив в index.php (или, что более правильно, но всё равно "не идеологично" в wp-config) строку вида

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

б) используя auto_prepend_file

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Gerga
На сайте с 02.08.2015
Offline
94
#22
ivan-lev:
Т.е. запросы на /?page=***.. можно обработать

таким образом вы не сможете отказаться от mod_rewrite, потому что раньше был парсинг директив RewriteEngine RewriteBase RewriteRule.

В моем видении, нужно раньше определить запросы /?page=*** и для них отключить mod_rewrite, чтобы условие:


# BEGIN WordPress
<IfModule mod_rewrite.c>

не срабатывало.

Ну это ляповство. Не думаю, что так кто-то делает. Мы используем mod_rewrite и довольствуемся.

IL
На сайте с 20.04.2007
Offline
435
#23
Gerga:
В моем видении, нужно раньше определить запросы /?page=*** и для них отключить mod_rewrite, чтобы условие:

Вообще речь о том, что "если очень захотеть", то вообще все директивы Rewrite*** можно полностью убрать из .htaccess.. (начиная с Engine on).

Но изначально для оптимизации скорости предлагалось директивы с двойными регулярками вида:

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

либо

а) оптимизировать с заменой регулярок на равенство:

RewriteCond %{QUERY_STRING} =page=1033

б) исключить.. а обработку перенести в PHP

Но, возвращаясь к исключению лишних правил...

Gerga:
определить запросы /?page=***

первая строчка "от wordpress" именно это и делает

RewriteRule ^index\.php$ - [L]

p.s. В любом случае, это не та оптимизация, которой следует заниматься в первую очередь..

Gerga
На сайте с 02.08.2015
Offline
94
#24
ivan-lev:
Вообще речь о том, что "если очень захотеть", то вообще все директивы Rewrite*** можно полностью убрать из .htaccess.. (начиная с Engine on).

Если захотеть, можно и горы свернуть и лоб об стену разбить.

---------- Добавлено 21.08.2019 в 18:06 ----------

ivan-lev:
первая строчка "от wordpress" именно это и делает

средствами mod_rewrite ибо в apache по-другому не принято.

IL
На сайте с 20.04.2007
Offline
435
#25
Gerga:
index.php будет загружен уже после работы mod_rewrite.

1. Ещё раз.. если убрать директивы RewriteEngine on - никакие rewrite-директивы обрабатываться не будут.

2. Если поставить строчку с index.php - выше директив, они также обрабатываться не будут.

Gerga
На сайте с 02.08.2015
Offline
94
#26
ivan-lev:
1. Ещё раз.. если убрать директивы RewriteEngine on - никакие rewrite-директивы обрабатываться не будут.

и тогда полностью отключить навигацию по сайту? :)

ivan-lev:
2. Если поставить строчку с index.php - выше директив, они также обрабатываться не будут.

Эту " RewriteRule ^index\.php$ - [L] " ?

RewriteRule разве не компонент mod_rewrite? :)

IL
На сайте с 20.04.2007
Offline
435
#27

Gerga, зачем мешать всё-в-одно?

1. запросы /?page=*** без mod_rewrite придут в index.php

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

3. можно оптимизировать правила, чтобы вместо регулярок использовалось сравнение. Это быстрее, но вряд ли даст реально ощутимый прирост скорости.

4. можно сделать полноценную обработку URL-ов без mod_rewrite, используя страницу ошибки 404, в которой уже обрабатывать навигацию.

5. правило Rewrite index.php - обрабатывается mod_rewrite

Gerga
На сайте с 02.08.2015
Offline
94
#28
ivan-lev:
Gerga, зачем мешать всё-в-одно?

Где мешанина? :)

ivan-lev:
да и вообще, без загрузки mod_rewrite.. для каждого запроса...

1. Я тут /ru/forum/comment/16162095 вам написал, что mod_rewrite полюбому будет загружаться. Хоть инклуд используйте, хоть в 1 обработчик перенаправлять.

ivan-lev:
4. можно сделать полноценную обработку URL-ов без mod_rewrite, используя страницу ошибки 404, в которой уже обрабатывать навигацию.

2. Не получится т.к. все равно пройдет через mod_rewrite и WP, а WP сделает редирект c /?page=12 на /page/12/

---------- Добавлено 21.08.2019 в 20:19 ----------

Можно сделать, чтобы WP не делал такой редирект, но зачем, если можно вообще исключить WP...

IL
На сайте с 20.04.2007
Offline
435
#29
Gerga:
2. Не получится т.к. все равно пройдет через mod_rewrite и WP, а WP сделает редирект c /?page=12 на /page/12/

Вы так и не поняли..

1. убираем из .htaccess всё, что связано с Rewrite*

2. /?page=12 без rewrite обрабатывается по умолчанию (IndexDocument в Apache) в index.php ("оно" так работает.. на большинстве хостингов.. но можно настроить и по-другому)

3. WP (в соответствии с настройками движка, если заданы ЧПУ) редиректит на /page/12/ (или заданный в свойствах страницы/поста slug/alias/ЧПУ)

4. Apache не находит адрес и обращается к 404 странице, которую мы задаём через ErrorDocument

5. в 404 странице включается "свой" обработчик, устанавливает HTTP-код 200 и передаёт управление index.php, который по REQUEST_URI (/page/12/ в данном случае, category/blablabla/ /contacts и любых других) выводит нужную (в соответствии с логикой движка) страницу, либо возвращает 404 ошибку, но уже средствами CMS со всеми "плюшками".

Gerga
На сайте с 02.08.2015
Offline
94
#30
ivan-lev:
1. убираем из .htaccess всё, что связано с Rewrite*

Ну тогда же мы полностью потеряем навигацию. Все ссылки сайта станут отдавать 404. Вы же помните, что домен остался прежним и все действия происходят в одной среде. Где для /?page=*** сделать редирект на указанную страницу, которая находится на этом же хосте и которую нужно показать с кодом 200.

fackest1:
Уточнения - сам домен не менялся

/ru/forum/comment/16161983

---------- Добавлено 21.08.2019 в 23:33 ----------

ivan-lev, дочитал и понял. Извините :)

---------- Добавлено 21.08.2019 в 23:48 ----------

Можно такую схему сделать, но скорость ответа как минимум на 10% хуже даже при наличии 80 RewriteRule...

Но все равно спасибо!

1 2345 6

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