0

我使用 .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 它可以正常工作。

有人可以帮忙吗?谢谢大卫·霍罗

4

2 回答 2

1

RedirectMatch针对不包含任何查询参数的“URL-path”进行操作。

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

于 2009-11-09T13:54:45.810 回答
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 必须根据您的需要进行调整,但查询替换应该是正确的。

于 2009-11-09T16:26:38.047 回答