如何使用mysql搜索和替换修复wordpress中断开的链接?

ca1c2owp  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(307)

我的一个客户使用了velvet blues更新URL插件(https://en-gb.wordpress.org/plugins/velvet-blues-update-urls/)在他们的网站上,几乎破坏了他们所有的链接。。。
现在链接看起来像: www.site.compost-name/ 而不是 www.site.com/post-name/ .
这是一个活的网站,所以我需要非常小心,我如何修复它,所以我不让事情变得更糟。
所以我知道我需要某种regex来检查站点url,后跟字母或数字,而不是 / .
我可以通过运行以下查询查看大量断开的链接: SELECT * FROM wp_postmeta WHERE meta_value REGEXP 'site.com[0-9 a-z A-Z]' .
通常在数据库中更新某些内容时,我会运行如下查询: UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.oldurl','http://www.newurl'); .
但是从我的研究中发现mysql不支持 preg_replace 功能(如何在mysql中替换正则表达式?)。
我想一种方法可能是在wp\u内容中添加一个过滤器,并在它加载到页面之前修复它,但这只会掩盖问题,不一定能修复它。
我在这个问题上有点困惑,因为有成千上万个断开的链接,所以搜索和替换查询有很大的空间出错,可能会让事情变得更糟,再加上我的regex知识有限。

wooyq4lh

wooyq4lh1#

sed 是你最好的朋友。 sed 's/oldurl/newurl/g' -r /project/root 将更新整个项目中的每个纯文本示例。

ryhaxcpt

ryhaxcpt2#

您可以使用not like操作数。例如,

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并查看结果。因为这不是理想的方法,可能会导致一些罕见的问题。

相关问题