Php 如何使用MySQL搜索和替换修复WordPress中的断开链接?

Php 如何使用MySQL搜索和替换修复WordPress中的断开链接?,php,mysql,wordpress,Php,Mysql,Wordpress,我的一个客户在他们的网站上使用了Velvet Blues Update URL插件(),并破坏了几乎所有的链接 现在链接看起来像:www.site.compost name/而不是www.site.com/post name/ 这是一个活的网站,所以我需要非常小心如何修复它,这样我就不会让事情变得更糟 因此,我知道我需要某种正则表达式来检查站点url,后跟字母或数字,而不带/ 我可以通过运行如下查询查看大量断开的链接:SELECT*FROM wp\u posttea WHERE meta\u v

我的一个客户在他们的网站上使用了Velvet Blues Update URL插件(),并破坏了几乎所有的链接

现在链接看起来像:
www.site.compost name/
而不是
www.site.com/post name/

这是一个活的网站,所以我需要非常小心如何修复它,这样我就不会让事情变得更糟

因此,我知道我需要某种正则表达式来检查站点url,后跟字母或数字,而不带
/

我可以通过运行如下查询查看大量断开的链接:
SELECT*FROM wp\u posttea WHERE meta\u value REGEXP'site.com[0-9 a-z a-z]

通常,当更新数据库中的某些内容时,我会运行如下查询:
updatewp\u postemta SET meta\u value=replace(meta\u value,'http://www.oldurl','http://www.newurl');

但从我的研究中发现,MySQL不支持一种
preg\u replace
功能()

我想一种方法可能是在wp_内容中添加一个过滤器,并在它加载到页面之前修复它,但这只是掩盖了问题,并不一定修复它


我对此有点困惑,因为有数千个断开的链接,所以搜索和替换查询有很大的空间出错,并可能使事情变得更糟,加上我的正则表达式知识有限

您可以为此使用非相似操作数。 比如说,

UPDATE wp_postmeta 
SET meta_value=REPLACE(meta_value,'site.com','site.com/') 
WHERE meta_value LIKE '%site.com%' 
AND 
meta_value NOT LIKE '%site.com/%' 

当然,为了以防万一,您需要首先运行selectquery并查看结果。因为这不是理想的方法,可能会导致一些罕见的问题。

sed
是您最好的朋友

sed的/oldurl/newurl/g'-r/project/root
将更新整个项目中的每个纯文本实例