使用RedirectMatch的正则表达式可以做任何事情

时间:2009-11-09 12:59:44

标签: regex apache .htaccess redirect httpd.conf

我使用.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

这是我的初始网址:

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

这个正则表达式是正确的,但至少没有重定向。 使用简洁的正则表达式和简单的URL,它可以正常工作。

有人可以提供帮助吗? 谢谢 David Hoareau

2 个答案:

答案 0 :(得分:1)

RedirectMatch针对“网址路径”进行操作,该路径不包含任何查询参数。

您可以使用mod_rewrite中的RewriteCond来匹配查询字符串。尽管IMO试图用正则表达式解析查询字符串是一个狡猾的命题。任何意外的参数或排序都可能破坏你的正则表达式。由于您未匹配特定路径,因此如果新系统中的任何URL在查询中包含?langue=...,则也可能出错。

答案 1 :(得分:0)

除了bobince已经说过的,试试这个mod_rewrite规则:

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

必须根据您的需要调整替换网址,但查询替换应该是正确的。