如何批量替换织梦超链接?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 织梦建站 正文

场景分析

明确一下“超链接”通常包含在以下几种地方:

  1. article 表中的 body 字段,这是最常见的地方。
  2. 栏目简介arctype 表中的 description 字段。
  3. 自定义字段:如果你在文章模型中添加了文本类型的自定义字段,并且这些字段里也包含了链接。
  4. 其他页面:如首页、自定义页面的HTML模板中。

我们将主要针对最常见的 进行说明,方法同样适用于其他字段。


使用织梦后台的“批量维护”功能(最安全、推荐新手)

这是织梦自带的功能,操作简单,最不容易出错,适合批量替换文章内容中的链接。

操作步骤:

  1. 登录织梦后台

  2. 进入 “批量维护” -> “数据库备份/恢复”

  3. 在打开的页面中,找到并点击 “SQL命令行工具”

  4. 在“请输入SQL命令”的文本框中,输入以下替换命令。

SQL命令格式:

UPDATE `表名` SET `字段名` = REPLACE(`字段名`, '旧字符串', '新字符串');

实战示例:

假设你的网站域名从 http://www.old-domain.com 更换为 https://www.new-domain.com,需要将文章内容中所有的旧链接批量替换为新链接。

  • 表名通常存储在 dede_addonarticle 表(如果是默认的文章模型)。
  • 字段名存储在 body 字段。
  • 旧字符串http://www.old-domain.com
  • 新字符串https://www.new-domain.com

你需要填入的SQL命令就是:

UPDATE `dede_addonarticle` SET `body` = REPLACE(`body`, 'http://www.old-domain.com', 'https://www.new-domain.com');

注意事项:

  • 表名前缀:如果你的数据库表前缀不是默认的 dede_,请务必修改为你的实际表前缀(cms_)。
  • 大小写敏感REPLACE 函数是区分大小写的,如果不确定,可以先小范围测试。
  • 备份数据库在执行任何批量更新操作前,务必备份数据库! 这是最重要的安全步骤,你可以在“数据库备份/恢复”页面进行备份。
  • 点击“查询”执行:输入命令后,点击“查询”按钮,系统会提示你“成功执行X条语句”,表示替换完成。

如果要替换栏目简介中的链接:

UPDATE `dede_arctype` SET `description` = REPLACE(`description`, '旧链接', '新链接');

使用DedeTAG批量替换(更灵活,需一定HTML知识)

这个方法利用织梦的模板标签,可以更精确地控制替换范围,但操作比SQL命令稍复杂。

操作步骤:

  1. 登录织梦后台
  2. 进入 “批量维护” -> “DedeTag代码批量替换”
  3. 在打开的页面中,你会看到两个输入框:
    • 原标记:输入你想要被替换掉的织梦标签或HTML代码片段。
    • 新标记:输入你想要替换成的新织梦标签或HTML代码片段。

实战示例:

假设你发现所有文章内容里的 <a href="/old-folder/" 链接都指向了错误路径,需要替换为 <a href="/new-folder/"

  • 原标记<a href="/old-folder/"
  • 新标记<a href="/new-folder/"

点击“开始替换”即可。

优缺点:

  • 优点:非常安全,因为它只处理织梦标签和特定代码,不会误伤数据库结构。
  • 缺点:灵活性不如SQL,只能替换明确的代码片段,无法进行复杂的字符串匹配(比如替换域名的一部分)。

使用PHP脚本进行高级替换(最强大,适合开发者)

当SQL命令无法满足复杂需求时(需要替换的旧链接不是一个固定字符串,而是符合某个模式的链接),可以编写一个PHP脚本在网站根目录下执行。

操作步骤:

  1. 备份数据库!(再次强调)
  2. 在网站根目录(与 dede 文件夹同级)创建一个新的PHP文件,replace_links.php
  3. 将下面的代码复制并粘贴到该文件中,并根据你的需求进行修改。
<?php
// 1. 设置数据库连接信息
$dbhost = 'localhost'; // 数据库主机
$dbuser = 'root';      // 数据库用户名
$dbpass = 'password';  // 数据库密码
$dbname = 'dedecms';   // 数据库名
$dbprefix = 'dede_';   // 数据库表前缀
// 2. 设置替换规则
// 旧链接数组,可以是多个
$old_links = array(
    'http://www.old-domain.com/old-path/',
    'http://www.old-domain.com/another-path/',
    'http://www.old-domain.com' // 也可以只替换域名
);
// 新链接数组,必须与旧链接一一对应
$new_links = array(
    'https://www.new-domain.com/new-path/',
    'https://www.new-domain.com/another-new-path/',
    'https://www.new-domain.com'
);
// 3. 连接数据库
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if (!$conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}
// 设置字符集
mysqli_set_charset($conn, "utf8");
// 4. 遍历所有需要替换的表和字段
$tables_and_fields = array(
    'addonarticle' => 'body', // 文章内容表
    'arctype' => 'description' // 栏目简介表
);
foreach ($tables_and_fields as $table => $field) {
    $full_table_name = $dbprefix . $table;
    // 构建SQL查询,获取所有记录
    $sql = "SELECT id, {$field} FROM {$full_table_name}";
    $result = mysqli_query($conn, $sql);
    if (mysqli_num_rows($result) > 0) {
        echo "正在处理表 {$full_table_name} 的 {$field} 字段...<br>";
        while ($row = mysqli_fetch_assoc($result)) {
            $id = $row['id'];
            $content = $row[$field];
            // 执行替换
            $new_content = str_replace($old_links, $new_links, $content);
            // 如果内容有变化,则更新数据库
            if ($new_content !== $content) {
                $update_sql = "UPDATE {$full_table_name} SET {$field} = ? WHERE id = ?";
                $stmt = mysqli_prepare($conn, $update_sql);
                mysqli_stmt_bind_param($stmt, "si", $new_content, $id);
                mysqli_stmt_execute($stmt);
                echo " - 更新ID {$id} 成功。<br>";
            }
        }
    }
}
echo "批量替换完成!";
mysqli_close($conn);
?>

如何使用:

  1. 修改代码开头的数据库连接信息、数据库名和表前缀。
  2. $old_links$new_links 数组中填入你的旧链接和新链接。
  3. $tables_and_fields 数组中,你可以添加更多需要处理的表和字段。
  4. 通过浏览器访问 http://你的域名/replace_links.php 即可执行脚本。
  5. 执行完毕后,务必删除这个 replace_links.php 文件,以免留下安全隐患。

总结与对比

方法 优点 缺点 适用场景
SQL命令 速度快、效率高、功能强大,可处理任何文本字段 有一定风险,操作不当可能破坏数据,需要了解基本SQL 最常用、最推荐的方法,特别是替换域名、固定路径等
DedeTAG替换 绝对安全,只处理标签,不影响数据库结构 灵活性差,只能替换固定代码片段,无法处理复杂模式 替换明确的织梦标签或HTML片段
PHP脚本 最灵活、最强大,可实现任意复杂的替换逻辑 最复杂,需要PHP和MySQL知识,操作不当风险高 需要基于复杂规则(如正则表达式)进行替换时

最终建议:

对于绝大多数用户,强烈推荐使用方法一(SQL命令),它是在效率和安全之间平衡得最好的选择,只要在操作前务必备份数据库,就可以放心使用。

-- 展开阅读全文 --
头像
dede调用多张图片
« 上一篇 前天
linux下编写c语言
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码

目录[+]