Jump to content
cosata8093

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

Recommended Posts

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

 

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

Имеются записи в блоге, 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]

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


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

Share this post


Link to post
Share on other sites
26 минут назад, cosata8093 сказал:

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

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

Share this post


Link to post
Share on other sites
7 минут назад, i3bepb сказал:

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

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

Share this post


Link to post
Share on other sites

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

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

  • +1 1

Share this post


Link to post
Share on other sites
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]

 

Share this post


Link to post
Share on other sites
2 часа назад, cosata8093 сказал:

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

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

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

Edited by i3bepb

Share this post


Link to post
Share on other sites

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

 

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]

 

 

 

 

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
2 часа назад, cosata8093 сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.