Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


cosata8093

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]

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


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

Надіслати
Поділитися на інших сайтах


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]

 

 

 

 

 

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.