Можно ли избавиться от циклической переадресации?

Обсуждение любых вопросов связанных с файлами конфигурации .htaccess

Можно ли избавиться от циклической переадресации?

Сообщение zapatronen » Пн авг 14, 2017 1:11 pm

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

Имею ссылку:
http://site.ru/product.php?article=FZ01 ... -MEGA-2560

Преобразую ее условием :
Код: выделить все
RewriteRule ^([^/]*)/([^/]*)\.html$ /product.php\?article=$1&name=$2

и на выходе получаю ссылку вида:
http://site.ru/FZ0114/Arduino-MEGA-2560.html

Преобразование работает, но только если в ручную вводить новый адрес ссылки, получается имею дубли.
Можно ли средствами только htpaccess перенаправить со старой ссылки на новую преобразованную?


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

Код: выделить все
RewriteCond %{QUERY_STRING} article=([^/]*)&name=([^/]*)
RewriteCond %{QUERY_STRING} !url_rewrited=1
RewriteRule product.php /%1/%2.html? [R,L,NC]
RewriteRule ^([^/]*)/([^/]*)\.html$ /product.php\?article=$1&name=$2  [L,NC]


С уважением, Павел
zapatronen
 
Сообщений: 3
Зарегистрирован: Пн авг 14, 2017 1:03 pm
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0

Сообщение Emilien » Пн авг 14, 2017 3:20 pm

https://habrahabr.ru/company/sprinthost/blog/129560/
При составлении более-менее сложных конфигураций mod_rewrite важно понимать, что изменение запроса не заканчивается на последнем RewriteRule. После того, как сработало последнее правило RewriteRule и был добавлен RewriteBase, mod_rewrite смотрит, изменился запрос или нет. Если запрос изменился, его обработка начинается заново с начала .htaccess.

Так что при первом проходе последний RewriteRule меняет запрос на /product.php?article=$1&name=$2 и при повторном проходе срабатывает редирект на /%1/%2.html.

Переменная %{ENV:REDIRECT_STATUS} пустая только при первом проходе по списку правил.
Код: выделить все
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^article=([^&]*)&name=([^&]*)
RewriteRule ^product\.php$ /%1/%2.html? [R=301,L]

RewriteRule ^([^/]*)/([^/]*)\.html$ /product.php?article=$1&name=$2  [L]


Если нужно чтоб работало даже когда параметры в произвольном порядке viewtopic.php?p=3118#p3118
Emilien
Мл. Сержант
 
Сообщений: 51
Зарегистрирован: Чт дек 10, 2015 3:35 am
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0

Сообщение zapatronen » Пн авг 14, 2017 3:59 pm

Омагад, спасибо огромное! Спасибо за ссылку на хабр пойду изучать
Хорошего вечера
zapatronen
 
Сообщений: 3
Зарегистрирован: Пн авг 14, 2017 1:03 pm
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0


Вернуться в Htaccess

Кто сейчас на форуме

Зарегистрированные пользователи: нет зарегистрированных пользователей

cron