Gerga

Gerga
Рейтинг
94
Регистрация
02.08.2015
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...

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

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

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

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

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

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

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

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

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

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

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

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

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


# BEGIN WordPress
<IfModule mod_rewrite.c>

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

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

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

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

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

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

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

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

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

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.* ))

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

fackest1:
Спасибо большое всем ответившим, особенно очень очень сильно благодарю Gerga, вопрос решен, спасибо Вам большое:

Пожалуйста :)

SeVlad:
Gerga, всё спалил. Теперь не узнаем что ТС натворил

От блин, все испортил 🤣

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

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

70 RewriteRule для каждого запроса и + 70 RewriteCond для главной - это много, я не знаю как это может сказаться.

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


RewriteBase /
RewriteCond %{QUERY_STRING} ^/?page=
RewriteRule ^/?$ page-redirect-handler.php [L]
fackest1:
Вышенаписанные правила 301 редиректа не работают,

Так вы не правильно их установили.

Пример:


RewriteCond %{QUERY_STRING} page=1050
RewriteRule ^/?$ https://site.ru/narushenie-rechi/? [R=301,L]

И ставьте свои правила выше правил WP. Так они будут приоритетнее.

Пример:


<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{QUERY_STRING} page=1050
RewriteRule ^/?$ https://site.ru/narushenie-rechi/? [R=301,L]

RewriteCond %{QUERY_STRING} page=1054
RewriteRule ^/?$ https://site.ru/lechenie-autizma/? [R=301,L]

# и так далее...
</IfModule>

# 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
fackest1:
И так далее, всего примерно 70 редиректов.

Конечно это не очень хорошо.

---------- Добавлено 20.08.2019 в 20:11 ----------

Кстати, если домен не поменялся, можете так сделать:


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} page=1050
RewriteRule ^/?$ narushenie-rechi/? [R=301,L]

RewriteCond %{QUERY_STRING} page=1054
RewriteRule ^/?$ lechenie-autizma/? [R=301,L]

# и так далее...
</IfModule>


---------- Добавлено 20.08.2019 в 20:36 ----------

fackest1, еще учтите, что в таком исполнении ссылки вида "/?page=12" и "/?page=12&что-то" будут редиректить на один и тот же url. Если такое не нужно, можно так сделать:


RewriteCond %{QUERY_STRING} ^/?page=1050$
RewriteRule ^/?$ narushenie-rechi/? [R=301,L]

Всего: 811