Соответствие RewriteCond для определенной пары параметр / значение запроса - PullRequest
2 голосов
/ 09 октября 2009

Я должен сделать перенаправление на другой хост, если в строке запроса есть определенная пара параметр / значение.

Пока у меня есть

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} [&\?]abc=23&?
RewriteRule ^(.*)$ http://anotherserver.com/$1 [R,NC,L]

, который работает для:

/index.php?id=95&abc=23
/index.php?abc=23&id=95
/index.php?id=95&abc=23&bla=123

но это также соответствует /index.php?id=95&abc=234 например.

Мне нужен шаблон, который точно соответствует abc=23, где бы он ни находился.

Есть предложения по этому поводу? : -)

Ответы [ 2 ]

6 голосов
/ 09 октября 2009

Я бы попробовал это регулярное выражение (&|^)abc=23(&|$), и совпадение только с %{QUERY_STRING}.

1 голос
/ 09 октября 2009

Знак вопроса делает предыдущий токен в регулярном выражении необязательным. Например: цвет соответствует цвету или цвету.

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} [&\?]abc=23&?

Вы сопоставляете abc = 23 и ИЛИ abc = 23 с остальной частью строки без ограничений, поэтому abc = 234 является допустимым соответствием. То, что вы действительно хотите, это & ​​или ничего больше. Я не уверен, является ли этот RegExp допустимым в Apache, но он будет записан как:

RewriteCond %{REQUEST_URI}?%{QUERY_STRING} [&\?]abc=23(&|$)

Вот тестовые примеры, которые я использовал в своем любимом онлайн тестере RegExp :

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