是否有维护脚本可在命名空间更名后批量修改页面链接?
批量修改命名空间链接的解决方案
针对MediaWiki环境下的命名空间迁移需求,完全不需要手动逐个修改链接,有以下几种高效的维护脚本/工具方案:
1. MediaWiki官方维护脚本
MediaWiki自带专门的批量文本替换脚本replaceText.php,配合页面移动脚本moveBatch.php可以完成全流程:
第一步:批量迁移命名空间页面
先创建一个文本文件(比如pages-to-move.txt),每行写入原命名空间下的页面名,格式为Foo:页面标题。然后执行moveBatch.php脚本完成页面迁移:php maintenance/moveBatch.php pages-to-move.txt --prefix Foo2:该命令会把所有
Foo:开头的页面批量移动到Foo2:命名空间下。第二步:批量替换全站链接
使用replaceText.php脚本,通过正则匹配所有指向原命名空间的链接并替换:php maintenance/replaceText.php --regex "\[\[Foo:([^\]]+)(?:\|([^\]]+))?\]\]" --replace "\[\[Foo2:\1|\2\]\]"这个正则会匹配两种链接格式:
[[Foo:Hello]]和[[Foo:Hello|Hello]],并统一替换为新命名空间的链接。
2. 数据库直接替换(需谨慎)
如果熟悉数据库操作,可以直接对MediaWiki的文本表执行替换操作(操作前必须全量备份数据库):
- 针对MySQL数据库,使用正则替换语句:
UPDATE text SET old_text = REGEXP_REPLACE(old_text, '\[\[Foo:([^\]]+)(?:\|([^\]]+))?\]\]', '[[Foo2:\\1|\\2]]'); - 若确认无其他文本包含
[[Foo:,也可以用简单替换:UPDATE text SET old_text = REPLACE(old_text, '[[Foo:', '[[Foo2:');
注意事项
- 所有操作前必须备份数据库和站点文件,建议先在测试环境验证效果;
- 使用
replaceText.php时,可添加--dry-run参数先预览替换结果,确认无误后再执行实际替换; - 数据库替换后需要刷新MediaWiki的页面缓存,避免旧内容残留。
内容的提问来源于stack exchange,提问作者Tim Audenaert
相关产品推荐
相关产品推荐

