Регулярное выражение с RedirectMatch делает все что угодно - PullRequest
0 голосов
/ 09 ноября 2009

Я использую .htaccess для выполнения перенаправления. Здесь линия

RedirectMatch permanent .*\?langue=([\w]{2}).*id_([\w]+)=([1-9]+) ***[protocol]***://myserver/rootContext/action?pagename=dir1/dir2/dir3/Redirect&type=$2&id=$3&lang=$1

Вот мой начальный URL:

***[protocol]***://localhost/adir/anotherDir/anotherDirAgian/oneMore/apage.php?langue=fr&id_dossier=261

Это регулярное выражение корректно, но по крайней мере перенаправление не выполняется. С простым регулярным выражением и простым URL-адресом он работает правильно.

Кто-нибудь может помочь? Спасибо Дэвид Оро

Ответы [ 2 ]

1 голос
/ 09 ноября 2009

RedirectMatch работает с «URL-путем», который не содержит параметров запроса.

Вы можете сопоставить строку запроса, используя RewriteCond в mod_rewrite. Хотя IMO - это хитрое предложение, пытающееся разобрать строки запроса с помощью регулярного выражения. Любые неожиданные параметры или порядок могут нарушить ваше регулярное выражение. Поскольку вы не соответствуете конкретному пути, он также может пойти не так, если какой-либо URL в новой системе будет содержать ?langue=... в запросе.

0 голосов
/ 09 ноября 2009

Кроме того, что уже сказал bobince, попробуйте это правило mod_rewrite:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)langue=(\w{2}.*)
RewriteCond %1lang=%3 ^(([^&]*&)*)id_([\w]+)=([1-9]+.*)
RewriteRule .* $0?%1type=%3&id=%4

URL замещения должен быть настроен в соответствии с вашими потребностями, но подстановка запроса должна быть правильной.

...