php - 正则表达式在重定向中排除 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)。我知道这可能是非常基本的,但如果有人能指出我正确的方向,我将不胜感激。
解决方案
这可能有效:
/uploads/folder/\d{1,3}/(.*?)(?:-small|-medium|-large)?(\.\w+)
/wp-content/uploads/$1$2
请注意,.
在正则表达式中表示任何字符,并且正则表达式量词在默认情况下是贪婪的(例如,尽可能匹配)。因此,拥有.*
往往是自找麻烦。
推荐阅读
- c# - 如何更改 ObservableCollection 中每个项目的数据?
- angularjs - 每当页面在 AngularJs UI 网格中加载时,水平和垂直滚动条都会粘在列上
- raspberry-pi - Windows 10 Iot raspberry 将 dotnet 应用程序添加到应用程序
- makefile - makefile 文件名操作
- php - Wordpress PHP条件标签不起作用
- javascript - 仅选择组中的一个复选框,但如果是某些复选框,则可以选择多个复选框
- perl - perl 的 Apache Freemarker 模板模块
- wordpress - 强制 https wordpess 进入 prestashop (.htaccess)
- vb.net - 在VB中插入查询
- d3.js - 在 d3js 中,如何绘制自定义形状(
) 在这个地球上而不是圆圈上?