使用 RedirectMatch 的正则表达式可以执行任何操作
我使用 .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,它可以正常工作。
有人可以帮忙吗? 谢谢 大卫·霍罗
I use .htaccess to perform redirection.
Here the line
RedirectMatch permanent .*\?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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
RedirectMatch 针对“URL 路径”进行操作,这不会不包含任何查询参数。
您可以使用 RewriteCond 来匹配查询字符串mod_rewrite。尽管在我看来,尝试使用正则表达式解析查询字符串是一个狡猾的提议。任何意外的参数或顺序都可能会破坏您的正则表达式。由于您没有匹配特定路径,因此如果新系统中的任何 URL 在查询中包含
?langue=...
,也可能会出错。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.除了 bobince 已经说过的之外,尝试这个 mod_rewrite 规则:
替换 URL 必须根据您的需要进行调整,但查询替换应该是正确的。
Beside that what bobince already said, try this mod_rewrite rule:
The substitution URL must be adjusted to your needs but the query substitution should be correct.