CodeIgniter网站更换域名后如何批量替换全站超链接旧域名地址?
CodeIgniter站点域名批量替换最优解决方案
以下方案按优先级从高到低排列,优先使用根源解决方案,避免长期额外性能开销:
方案1:批量替换数据库存储的旧域名(根源解决,优先使用)
大部分站点的文章内容、自定义配置、用户发布的内容都会存储在数据库中,优先处理这部分:
- 先整站备份数据库,避免操作失误丢失数据
- 直接执行MySQL替换命令,根据你的业务场景替换对应表名和字段名即可:
-- 通用语法 UPDATE 你的表名 SET 字段名 = REPLACE(字段名, 'http://www.oldedomain.com', 'http://www.newdomain.com'); -- 示例:替换文章表content字段中所有旧域名 UPDATE article SET content = REPLACE(content, 'http://www.oldedomain.com', 'http://www.newdomain.com');
- 也可以写一个CI一次性运行脚本,执行完立即删除即可:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Domain_replace extends CI_Controller { public function index() { $old_domain = 'http://www.oldedomain.com'; $new_domain = 'http://www.newdomain.com'; // 按需替换对应表的对应字段即可 $this->db->set('content', "REPLACE(content, '{$old_domain}', '{$new_domain}')", FALSE); $this->db->update('article'); echo '替换完成,请立即删除本脚本'; } }
方案2:替换项目文件内硬编码的旧域名
- 用编辑器的全局搜索替换功能(VSCode、PHPStorm等均支持目录级全局替换),搜索整个项目目录下的
http://www.oldedomain.com,统一替换为新域名,覆盖以下场景:- application/views 目录下视图文件硬编码的a标签
- 自定义类库、助手函数中写死的链接
- JS、CSS等静态资源文件中写死的链接
- 同步修改CI核心配置,打开
application/config/config.php修改base_url参数:
$config['base_url'] = 'http://www.newdomain.com/';
建议后续生成链接统一使用CI自带的site_url()、base_url()函数生成,不要硬编码域名,后续换域名无需修改业务内容
方案3:运行时动态替换(临时过渡方案)
如果赶时间来不及修改所有数据和代码,可以用CI的钩子功能在页面输出前统一替换旧域名,无需修改原有业务代码:
- 第一步开启钩子,打开
application/config/config.php:
$config['enable_hooks'] = TRUE;
- 第二步打开
application/config/hooks.php添加钩子配置:
$hook['display_override'][] = array( 'class' => 'Domain_replace', 'function' => 'replace_old_domain', 'filename' => 'Domain_replace.php', 'filepath' => 'hooks' );
- 第三步在
application/hooks目录下新建Domain_replace.php:
<?php class Domain_replace { public function replace_old_domain() { $CI =& get_instance(); $output = $CI->output->get_output(); $old_domain = 'http://www.oldedomain.com'; $new_domain = 'http://www.newdomain.com'; $output = str_replace($old_domain, $new_domain, $output); $CI->output->set_output($output); } }
该方案上线速度最快,但会额外增加少量服务器性能开销,建议改完所有数据和文件后及时移除
额外保障:旧域名全局301重定向
不管使用以上哪个方案,都建议在旧域名的服务端配置301永久重定向到新域名,既可以避免用户访问收藏的旧链接失效,也能实现搜索引擎权重转移,Nginx配置示例如下:
server { listen 80; server_name www.oldedomain.com oldedomain.com; return 301 http://www.newdomain.com$request_uri; }
内容的提问来源于stack exchange,提问作者Farhat
相关产品推荐
相关产品推荐

