目前,我在WordPress中使用重定向插件以这种方式重定向包含q问号的所有网址:
Source: /(.*)\?(.*)$
Target: /$1
这很有效。它会使用?
重定向任何链接,例如/good-friends-are-great.html?param=x
到/good-friends-are-great.html
。
但是,现在我需要例外。我需要允许/friends
传递GET参数,例如/friends?guest=1&event=chill_out&submit=2
或/friends/?more_params
,不会截断参数。
我尝试将插件中的正则表达式修改为:
Source: /(?!friends/?)\?(.*)$
Target: /$1
但这并没有奏效。使用上面的表达式,任何与?
的链接都不再重定向。
你能帮忙吗?
答案 0 :(得分:1)
您可以使用以下正则表达式:
/(.*(?<!friends)(?<!friends/))\?.*$
正则表达式使用2个负面的后视镜,因为在这种正则表达式中,我们不能使用可变宽度的后视镜。 (.*(?<!friends)(?<!friends/))
匹配任意数量的任何字符,最多?
,但检查?
前面是friends
还是friends/
。
修改强>
这是我的第一个正则表达式在当前场景中效果不佳:
/((?:(?!friends/?).)+)\?.*$
其子模式(?:(?!friends/?).)+
匹配不包含friends
或friends/
的字符串。
答案 1 :(得分:0)
您应该刚刚添加到第一个(.*)
,而不是替换第一个Source: /(?!friends/?)(.*)\?(.*)$
Target: /$1
:
(?!friends/?)
否定前瞻组hashCode
本身并不匹配任何内容;它只是阻止某些比赛。