我使用.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
答案 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
必须根据您的需要调整替换网址,但查询替换应该是正确的。