Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

ЧПУ через RewriteRule и редирект на это


cosata8093
 Поделиться

Рекомендованные сообщения

Здравствуйте!

 

Суть проблемы:

Имеются записи в блоге, url выглядит как site.ru/index.php?route=blog/article&article_id=84

Возникло непреодолимое желание сделать для этих уров ЧПУ, но есть несколько нюансов:

  • установленный модуль блогов не может в ЧПУ;
  • установленный SEO модуль (All in one seo) не может в ЧПУ для блогов;
  • устанавливать другие модули не хочется, ибо сайт уже давно работает и играть с новым seo-модулем нет желания, т.к. товаров много и есть шанс что-то потерять.

 

Т.к. записей в блоге чуть меньше десятка и публикуются они туда раз в сто лет, решено было сделать ЧПУ силами .htaccess. С этим проблем не возникло

RewriteRule ^blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata$ index.php?route=blog/article&article_id=84

В итоге получаем две страницы - без ЧПУ и с ним. Следовательно, нам нужно настроить редирект с первого на второе. И вот тут я сломал голову.

Вариант типа 

RewriteRule ^blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata$ index.php?route=blog/article&article_id=84
Redirect 301 /index.php?route=blog/article&article_id=84 httрs://site.ru/blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata

не сработал

 

Вариант:

RewriteRule ^blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata$ index.php?route=blog/article&article_id=84
RewriteCond %{QUERY_STRING} ^route=blog/article&article_id=84$
RewriteRule ^(.*)$ httрs://site.ru/blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata? [R=301]

редиректит, но в итоге получаю "К сожалению, запрашиваемая Вами страница не найдена".


Может у кого-нибудь есть мысли, как связать эти два правила - создание ЧПУ-копии и редирект на неё?

Ссылка на комментарий
Поделиться на других сайтах


26 минут назад, cosata8093 сказал:

редиректит, но в итоге получаю "К сожалению, запрашиваемая Вами страница не найдена".

А в итоге то какой url получается после всех преобразовании?

Ссылка на комментарий
Поделиться на других сайтах


7 минут назад, i3bepb сказал:

А в итоге то какой url получается после всех преобразовании?

Нужный, с ЧПУ, т.е. httрs://site.ru/blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata, только её ответ - 404.

Ссылка на комментарий
Поделиться на других сайтах


Вы неверно понимаете работу правил в htaccess

Их задача
внешние ссылки направить на нужный обработчик
Но никак внутренние превращать в ЧПУ

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

15 часов назад, cosata8093 сказал:

Нужный, с ЧПУ, т.е. httрs://site.ru/blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata, только её ответ - 404.

 

16 часов назад, cosata8093 сказал:

RewriteRule ^blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata$ index.php?route=blog/article&article_id=84 RewriteCond %{QUERY_STRING} ^route=blog/article&article_id=84$ RewriteRule ^(.*)$ httрs://site.ru/blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata? [R=301]

 

 

Надо расмотреть каждый возможный вариант:

 

1 Зашли на сайт по url=blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata. Первый RewriteRule преобразует в index.php?route=blog/article&article_id=84. Второй преобразует RewriteRule преобразует обратно в blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata. Алгоритм видит, что url от изначального не отличается и на этом останавливается. Или после этих правил срабатывает стандартное правило - если нет реального файла или папки то на index.php и в GET параметр _route_ все остальное.

 

2 Зашли на сайт по url=index.php?route=blog/article&article_id=84. Первый RewriteRule не подходит, пропускается. Второй RewriteRule подходит и преобразует в blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata. Затем либо срабатывает стандартное правило, либо если предусмотрено чтобы оно не срабатывало, то начинается следующая итерация, т.к. от исходного url изменился и тут мы попадам в первый вариант (см. 1)

 

Итого по моим соображениям надо добавить, какой-то признак - пусть GET параметр need_stop_iteration=1, который позволить не выполнять второй правило если сработало первое. А также, чтобы не срабатывало стандартное правило, добавить флаг L во второе правило. А еще второе правило уточнил бы, что именно ^index.php?, но это так уже оптимизация, чтобы все подряд url-ы не подходили под подобные правила.

Вот такой вариант попробуй, ну и если все ок, то измени на 301 редирект:

RewriteRule ^blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata$ index.php?route=blog/article&article_id=84&need_stop_iteration=1
RewriteCond %{QUERY_STRING} ^route=blog/article&article_id=84$
RewriteRule ^index.php$ /blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata [R=302, L]

 

Ссылка на комментарий
Поделиться на других сайтах


2 часа назад, cosata8093 сказал:

попробовал – 500 ошибка на весь сайт.

ну тут надо отладкой заниматься по месту, видеть все правила .htaccess

Вот хорошая статья https://habr.com/ru/company/sprinthost/blog/129560/

Изменено пользователем i3bepb
Ссылка на комментарий
Поделиться на других сайтах


Какой отладкой зниматься?
Если о

 

blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata

Не знает система

Т.е. ссылка с сайта всегда будет

route=blog/article&article_id=84

Если конечно ее не прописать руками

Но как только вы подключите правильно преобразователь
то практически ничего делать не надо
 

 

20 часов назад, cosata8093 сказал:

решено было сделать ЧПУ силами .htaccess


Но вы действиельно в таком случае
можете обойтись и одним правилом

 

RewriteRule ^blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata$ index.php?route=blog/article&article_id=84

Это правило для  входящих

А перед ним

типа редиректа, если ссылка попаплп в индкс

RewriteCond %{QUERY_STRING} ^route=blog/article&article_id=84$
RewriteRule ^(.*)$ httрs://site.ru/blog/neskolko-pravil-o-vybore-tsvetovoy-gammy-laminata? [R=301]

 

 

 

 

 

Ссылка на комментарий
Поделиться на других сайтах

2 часа назад, cosata8093 сказал:

Всем спасибо, нагуглил подобное моему решение, которое сработало.

Интересно какое, покажите?

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.