2

我需要将旧博客 URL 重定向到新博客 URL。ID 字段是关键查询字符串,查询字符串中的其他所有内容都应忽略。高层次的逻辑:

如果旧的不区分大小写的 URL 匹配:/Blog/Post.aspx?+ URLID=33查询字符串中的任何位置,那么我将重定向到:/newblog/newurl/

当前正则表达式代码:(?i:/Blog/Post.aspx)|(\?)|(?i:id=33)

Success: /Blog/Post.aspx?id=33
Fails: /Blog/Post.aspx?ignore=me&id=33
Fails: /Blog/Post.aspx?ignore=me&id=33&ignoreme=too

我如何让它忽略潜在的未知查询字符串ignore=meand ignoreme=too,但仍然想出一个 REGEX 匹配以ID=33在查询字符串中重定向?

感谢您的回答 m.buettner!

4

2 回答 2

2

现在你甚至会重定向,如果你只有 ID=33在你的 URL 中,或者即使你在那里只有一个问号。我想这不是你想要的。您可能正在寻找这样的东西:

(?i:/Blog/Post.aspx\?.*id=33(?!\w)).*

这将需要/Blog/Post.aspx?然后允许任意字符,直到id=33遇到。

根据您使用的语言,您还可以使用前瞻,这样可以更轻松地检查不同的参数,您可能不知道其顺序:

(?i:/Blog/Post.aspx\?(?=.*id=33(?!\w))).*

这可以很容易地扩展到

(?i:/Blog/Post.aspx\?(?=.*id=33(?!\w))(?=.*another=requirement(?!\w))).*

使用第一种方法,您必须为两个可能的订单添加两个备选方案。

编辑:所有三种解决方案的警告:在数字之后,它们需要一个非单词字符(除了字母、数字或下划线之外的任何字符)。...id=33+34...这意味着他们会在和等情况下给出误报...id=33%2F...。但这些不应该首先由 Wordpress 生成。

于 2012-11-07T21:50:34.017 回答
0

操作,我打算提供一个通用答案来匹配 url 中的通用属性!好吧,我会把它留在这里以防你需要它

演示

(?:(id|noignoreme|dontignoreme)=([^&\n]+)(?:\n|&|$))

有了这个,您可以添加您想要接受的参数,它将返回为 group1(选项)和 group2(该选项的文本)。

之后你可以看看是否ID = 33 then do that; else do thot;

于 2012-11-07T22:08:53.117 回答