@igorkorneichuk

Как сделать рдирект в htaccess с заменой символа в параметре?

Существует URL вида:

/index.php?route=extension/payment/test/check&trx_id=321&lang_code=ru&merch_id=123&o.order_id=18&ts=20200413+10%3A38%3A31

Необходимо проверить что route=extension/payment/test/check и сделать 301 редирект с заменой символа + на T в параметре ts.

Сложность в том, что набор параметров не постоянный (могут быть представлены или нет), а замена нужна только в ts.
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 2
shambler81
@shambler81 Куратор тега htaccess
GET - не является частью урла и по этому RewriteRule он не попадает вообще , от слова совсем
По этому его выделяют через RewriteCond

# 301 --- http://www.test.com/faq.html?faq=13&layout=bob => http://www.test2.com/faqs.html
RewriteCond %{HTTP_HOST} ^www\.test\.com$
RewriteCond %{QUERY_STRING} (^|&)faq\=13($|&)
RewriteCond %{QUERY_STRING} (^|&)layout\=bob($|&)
RewriteRule ^faq\.html$ http://www.test2.com/faqs.html? [L,R=301]

И даже можно менять часть параметров
группировав их (...) в конд и вставляя их в рул но уже не с $1 а %1
НО изменить гет парметр рул не может, ибо он его не видит.
что он может
Он может удалить все гет параметры
...faqs.html? - Это не опечатка в конце, знак вопроса удаляет параметры совсем.
И по идее теперь можно подставить, но не один а все сразу.
Можно так же указать явный гет параметр в конечном урле, НО если у вас все входящие гет параметры уже указаны, в противном случае вы потеряете их.

И того
Можно сделать редирект с гет параметром на без гет
Можно сделать с без гет на гет
Можно заменить часть гет параметра
НО конечный выхлоп будет сумма всех гет параметров плюс измененный ваш, но это статическая конструкция кроме вашего изменения, если появится еще 1 гет параметр в урле кроме как задуманный вами, он обрежется при редиректе.
Надеюсь понятно ?
Ответ написан
Комментировать
@dodo512
RewriteCond %{QUERY_STRING} (^|&)route=extension/payment/test/check($|&)
RewriteCond %{QUERY_STRING} ^(.*&)?(ts=\d+)\+(.*)
RewriteRule ^index\.php$ /$0?%1%2T%3 [R=301,L,NE]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы