htaccess url regex отображает «&», если обратная ссылка совпадает - PullRequest
0 голосов
/ 08 апреля 2011

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

Я сопоставляю URL-адреса следующим образом:

^/term1(\?)?(.*)

, что успешно соответствует

http://domain.tld/term1?utm=1234

и при использовании в шаблоне, подобном

^/term1(\?)?(.*)   /term1handler.aspx$1$2 [I]

вполне правильно перенаправляет

http://domain.tld/term1?utm=1234

до

http://domain.tld/term1handler.aspx?utm=1234

Однако некоторые из моих перенаправлений нужно перенаправить на что-то с параметром строки запроса, уже имеющимся в выходных данных. Существующий редирект выглядит как

^/term1   /term1handler.aspx?ID=12345 [I]

Я бы хотел найти решение, которое позволило бы мне заменить 1 доллар на амперсанд, если есть совпадение, чтобы я получил

http://domain.tld/term1handler.aspx?ID=12345&utm=1234

Существует ли шаблон регулярного выражения, который может это сделать?

1 Ответ

1 голос
/ 08 апреля 2011

Ваше правило должно использовать% {QUERY_STRING} и должно использовать флаг QSA в RewriteFlag, например:

RewriteCond %{QUERY_STRING} ^(utm=.*)$
RewriteRule ^term1/?$ term1handler.aspx?%1 [R,L,QSA,NE]

Флаг QSA обязательно добавит utm=1234 параметр запроса с дополнительным параметром запроса ID=12345, что сделает составной REQUEST_URI похожим на /term1handler.aspx?ID=12345&utm=1234

Из руководства http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

'qsappend | QSA' (добавление строки запроса) Этот флаг заставляет механизм перезаписи добавлять строку строки запроса строки подстановки к существующей строке вместо ее замены. Используйте это, если вы хотите добавить больше данных в строку запроса с помощью правила перезаписи.

Также здесь используется NE (без escape), чтобы позаботиться о наличии специальных символов (;, %, $ etc) в параметрах запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...