开发者

Regular expression with RedirectMatch does anything

I use .htaccess to perform redirection. Here the line

RedirectMatch per开发者_如何学Pythonmanent .*\?langue=([\w]{2}).*id_([\w]+)=([1-9]+) ***[protocol]***://myserver/rootContext/action?pagename=dir1/dir2/dir3/Redirect&type=$2&id=$3&lang=$1

Here my inital url:

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

This regular expression is correct, but at least, no redirection is done. With silmple regular expression and simple url it works correctly.

Does somebody can help? Thanks David Hoareau


RedirectMatch operates against the ‘URL-path’, which does not include any query parameters.

You can match against a query string by using a RewriteCond in mod_rewrite. Although IMO it's a dodgy proposition trying to parse query strings with regex. Any unexpected parameters or ordering could break your regex. Since you aren't matching a particular path, it could also go wrong if any URL in the new system contained ?langue=... in the query.


Beside that what bobince already said, try this mod_rewrite rule:

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

The substitution URL must be adjusted to your needs but the query substitution should be correct.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜