首页 > 解决方案 > 正则表达式在重定向中排除 URL 的不同部分

问题描述

我希望在 WordPress 安装上重定向图像,如下所示:

从:

https://example.com/uploads/folder/123/image.jpg
https://example.com/uploads/folder/123/image-small.jpg
https://example.com/uploads/folder/123/image-medium.jpg
https://example.com/uploads/folder/123/image-large.jpg

到一个独特的:

https://example.com/wp-content/uploads/image.jpg

目标是让所有变体(普通、小型、中型和大型)从旧文件夹重定向到新文件夹中的唯一图像。我已经能够通过Redirection plugin实现这一点,使用一系列正则表达式:

/uploads/folder/\d{1,3}/(.*).jpg
/wp-content/uploads/$1.jpg

/uploads/folder/\d{1,3}/(.*)-small(.*)
/wp-content/uploads/$1$2

/uploads/folder/\d{1,3}/(.*)-medium(.*)
/wp-content/uploads/$1$2

/uploads/folder/\d{1,3}/(.*)-large(.*)
/wp-content/uploads/$1$2

但这似乎效率不高,我希望有一个正则表达式来统治它们……</p>

我尝试了不同的方法将所有案例统一在一个正则表达式中,但无法做到(我发现的排除方法不允许我通过$1$2正确重写 URL)。我知道这可能是非常基本的,但如果有人能指出我正确的方向,我将不胜感激。

标签: phpregexwordpress

解决方案


这可能有效:

/uploads/folder/\d{1,3}/(.*?)(?:-small|-medium|-large)?(\.\w+)
/wp-content/uploads/$1$2

请注意,.在正则表达式中表示任何字符,并且正则表达式量词在默认情况下是贪婪的(例如,尽可能匹配)。因此,拥有.*往往是自找麻烦。


推荐阅读