2013-06-27 3 views
0

Мы считаем, что клиенты с определенными поставщиками по электронной почте получить полу колоны заменить на% 3b, так что URL мы посылаем им становитсязамена всех вхождений% 3b в URL

http://www.mytestsite.com/connect/vehicles/?rm=view_results%3bmake=BMW%3bmodel=3%20SERIES%3bvehicle_type_desc=Car 

, но она должна быть

http://www.mytestsite.com/connect/vehicles/?rm=view_results;make=BMW;model=3%20SERIES;vehicle_type_desc=Car 

Я пробовал любое количество конфигураций в файлах httpd.conf и .htaccess для решения этой проблемы без успеха. Я решил использовать файл .htacces, и вот некоторые из моих попыток в этом файле.

RewriteCond %{QUERY_STRING} ^[A-Z]+\ /([^?\ ]*)%253b([^?\ ]*) 
RewriteRule^%1;%2 [R=301,NE,NC,L] 
RewriteRule (.*)\%3b(.*)\%3b(.*)\%3b(.*) $1;$2;$3;$4 [R=301,L] 

Также

RewriteCond %{QUERY_STRING} (.*)(%3b)(.*) 
RewriteRule ^%3b %1;%2? [R=301,L,NC,NE 

Любая помощь детализация, какой файл лучше использовать (httpd.conf или .htaccess) и как достичь поставленной цели были бы оценены. Благодарю.

ответ

2

Я решил эту проблему после нескольких проб и ошибок. Ниже приведено условие и правило перезаписи.

RewriteCond %{QUERY_STRING} ^([^.]+view_results)%3b([^.]+)%3b([^.]+)%3b([^.]+)$ [NC] 
RewriteRule .* http://www.mytestsite.com/connect/vehicles/?rm=view_results;%2;%3;%4 [R=301,L,NC,NE] 

Из этого решения я признаюсь, что исходный вопрос был задуман и, вероятно, именно поэтому я не получил никакой помощи здесь. Вопрос должен был быть «Как перенаправить этот URL, заменив% 3b?»

Чтобы объяснить решение:

RewriteCond получает все в QUERY_STRING, который перемежается с 3% 3BS. Конечно, из регулярного выражения видно, что мы не фиксируем оскорбительные символы, поскольку мы их впоследствии заменим, и сделаем этот захват нечувствительным к регистру ([NC]).

RewriteRule берет все по всему URL-адресу и заменяет его правильным шаблоном, вставляя захваты как% 2 и т. Д. Мы не хотим% 1, если нас интересует только один шаблон URL-адреса и идут переписать его в любом случае.

Что следует учитывать, так это то, что если у RewriteCond не была буквальная строка «view_results», тогда она захватывает любой URL-адрес, который имеет этот шаблон, и некоторые запросы CGI, созданные нашей системой, соответствуют этому шаблону.

Аналогичным образом использование шаблона «. *» Для захвата URL-адреса в RewriteRule не является идеальным, но я не нашел способа распознать шаблоны RewriteRule из% 1 и т. Д., Поэтому совет должен использовать этот метод только если вы гарантировали, что ваш RewriteCond предотвратит непреднамеренное поведение.

Надеюсь, что это поможет кому-то еще.