RegEx for URL模式,重新启动后重定向

时间:2017-11-10 12:56:28

标签: php regex url regex-lookarounds

过去两个小时我一直在努力和测试,并且根本无法绕过整个RegEx的东西,以便找到适当的解决方案......

由于最近重新启动,我正尝试将旧网站中的几个网址重定向到新网站。

This is the current state of things / a demo of my RegEx

基本上它看起来像这样:

.+(\/es|\/de|\/en)?\/(legal)(.+)?

我的问题是像https://example.com/es/projects/legal-yeah这样的网址也是匹配的,这看起来很有意义,但不是我想要实现的......

如何执行仅匹配中间没有任何内容的网址语言字符串的第一部分(de / en / es / empty)和第二部分(/ legal)的测试?

非常感谢您分享您的想法,感谢它!

2 个答案:

答案 0 :(得分:1)

通过使用行尾锚$并在合法后明确添加(\/.*),您可以实现所需:

.+(\/es|\/de|\/en)?\/(legal)(\/.+)?$

https://regex101.com/r/HsIDkQ/8

答案 1 :(得分:0)

这个最终的RegEx规则匹配我想要的URL - 忽略" legal" -string(在本例中)可能出现在另一个URL上的任何其他出现其他一些级别和模糊的'足以包括所有语言案例,即使没有出现语言字符串。

Solution

最终的诀窍是强制规则在其他内容之前寻找TLD,因此它只允许包含第一级URL。

更新:由于重定向引擎/插件仅使用了URL路径,不包括域(see GitHub issue),因此我的第一个解决方案无效。因此,我不能根据需要与DOT匹配。

现在规则正在关注字符串的开头,并且不接受目标URL-slug前面的任何语言字符串,这反过来会消除误报。

感谢@Xatenev指出了我正确的方向!