1 Отредактировано Андрей (26.09.2022 01:24:44)

Тема: Редирект в htaccess

Здравствуйте! Помогите разобраться. Предоставляю покупателю динамическую ссылку для оплаты такого вида http://site.ru/onlinepay/doPay/?order_id=9341 эта ссылка переводит покупателя на платёжный шлюз банка (на другой сайт). Стоит задача предоставить покупателю более короткую ссылку такого вида http://site.ru/?order_id=9341
Через htaccess делаю запись перенаправление

RewriteCond %{QUERY_STRING} ^/?order_id=(.)$ [NC]
RewriteRule ^(. )$ http://site.ru/onlinepay/doPay/?order_id=%1 [R=301,L]

В итоге получаю сообщение в браузере "Циклическое перенаправление на странице" Что делаю не так и как это можно реализовать?

Повысить оценку Понизить оценку

2

Re: Редирект в htaccess

Ошибка происходит, потому что у вас символ ? (вопрос) не заэкранирован.
Правильно вот так:

RewriteCond %{QUERY_STRING} ^/\?order_id=(.*)$ [NC]
RewriteRule ^(.*)$ http://site.ru/onlinepay/doPay/?order_id=%1 [R=301,L]

Повысить оценку Понизить оценку

3

Re: Редирект в htaccess

Спасибо что откликнулись. Но задача не выполнена. В моём варианте редирект всё таки есть (ссылка меняется на нужную) но происходит ошибка "Циклическое перенаправление на странице". В вашем варианте нет этой ошибке, но и редиректа на нужный адрес тоже нет. Что можете подсказать?

Повысить оценку Понизить оценку

4

Re: Редирект в htaccess

Попробуйте такой вариант

RewriteCond %{QUERY_STRING} (?:^|&)order_id\=(.*)(?:$|&)
RewriteRule ^$ /onlinepay/doPay/?%{QUERY_STRING}

Повысить оценку Понизить оценку

5

Re: Редирект в htaccess

Спасибо за участие, но ваш пример тоже не переадресует браузер на нужную ссылку, адрес остаётся прежним и открывается главная страница, кэш браузера естественно чищу

Повысить оценку Понизить оценку

6 Отредактировано Андрей (05.10.2022 08:50:30)

Re: Редирект в htaccess

Андрей пишет:

Спасибо за участие, но ваш пример тоже не переадресует браузер на нужную ссылку, адрес остаётся прежним и открывается главная страница, кэш браузера естественно чищу


Тогда такой вариант.

RewriteEngine on
RewriteCond %{QUERY_STRING} ^order_id\=(.*)$ [NC]
RewriteRule ^(.*)$ /onlinepay/doPay/?order_id=%1 [L,NE]

В браузере URL не будет меняться.

Повысить оценку Понизить оценку

7

Re: Редирект в htaccess

Тогда такой вариант.

RewriteEngine on
RewriteCond %{QUERY_STRING} ^order_id\=(.*)$ [NC]
RewriteRule ^(.*)$ /onlinepay/doPay/?order_id=%1 [L,NE]

В браузере URL не будет меняться.

Такой вариант вызывает ошибку сервера 500

Повысить оценку Понизить оценку