使用 RedirectMatch 的正则表达式可以执行任何操作

发布于 2024-08-10 18:40:07 字数 475 浏览 10 评论 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,它可以正常工作。

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

流殇 2024-08-17 18:40:07

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.

抚笙 2024-08-17 18:40:07

除了 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 必须根据您的需要进行调整,但查询替换应该是正确的。

Beside that what bobince already said, try this mod_rewrite rule:

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

The substitution URL must be adjusted to your needs but the query substitution should be correct.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文