2009-11-09 56 views
0

我使用.htaccess来执行重定向。 这里行RedirectMatch的正则表达式做任何事情

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

这里我inital网址:​​

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

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

有人可以帮忙吗? 谢谢 David Hoareau

回答

1

RedirectMatch针对'URL路径'进行操作,该URL路径不包含任何查询参数。

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

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 

取代URL必须进行调整,以您的需求,但查询替代应该是正确的。