我的一个客户使用了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知识有限。
2条答案
按热度按时间wooyq4lh1#
sed
是你最好的朋友。sed 's/oldurl/newurl/g' -r /project/root
将更新整个项目中的每个纯文本示例。ryhaxcpt2#
您可以使用not like操作数。例如,
当然,为了以防万一,您需要先运行selectquery并查看结果。因为这不是理想的方法,可能会导致一些罕见的问题。