@Barrakuda74

Как работает флаг [QSA] в mod_rewrite?

Написано ли где-то в официальной доке, что флаг [QSA] сам добавляет асперсанд (&) к существующим параметрам? Знаю что вроде как добавляет, и если мы во втором аргументе RewriteRule подготовим строку к параметрам из {query_string}, вручную прописав '&', то получим двойной амперсанд, но только нигде не написано об этом, написано только что там хранятся параметры запроса, однако про амперсанд ни слова.
А второй вопрос, с которым столкнулся:
Везде пишут, что "Если был указан флаг [QSA], параметры запроса будут добавлены в начало %{QUERY_STRING}."
Но при запросе "site.ru/news/?id=4" и правиле "RewriteRule ^news/$ index.php/?type=news [QSA]", мы видим, что вроде как параметры (id=4) добавляются в конец %{QUERY_STRING} (type=news), и итоговый query_string равен "type=news&id=4". Так в начало или в конец добавляются? Или под %{QUERY_STRING} здесь подразумеваются именно параметры пользователя, а под "параметрами" те, которые прописаны во втором аргументе RewriteRule:
  • Вопрос задан
  • 2489 просмотров
Пригласить эксперта
Ответы на вопрос 1
shambler81
@shambler81 Куратор тега htaccess
вы не учли того факта что это GET и он не является частью урла а следовательно не попадает в ваше условие.
# 301 --- site.ru/news/?id=4 => site.ru/index.php/?type=nes
RewriteCond %{QUERY_STRING} (^|&)id\=4($|&)
RewriteRule ^news/$ /index.php/?type=nes [L,R=301]

Обратите внимание что в верху я выбираю и ? и & что в свою очередь можно и не добавлять
Думаю вам первоначальные настройки делать лучше тут https://donatstudios.com/RewriteRule_Generator , а потом добавлять уже ваши условия.
Так же если вам нужно будет выделить часть гетр запроса и подставить его в рул, то вместо $1 используйте %1
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы