如何将WordPress网站从一个位置复制/转移到另一个位置

时间:2011-02-04 01:00:10

标签: wordpress

我是WordPress的新手并且对平台印象深刻......直到将我的本地MAMP wordpress网站发布到我的生产服务器上时 - 从一台服务器传输网站的方法并不明确,直截了当到另一个。

目的:

将完整的wordpress网站从一个位置转移到另一个位置,同时保留所有媒体,设置和内容。

现有方法限制:

  • 内置导出/导入功能
    • 不传输主题或设置
    • 添加到当前内容,但不会替换当前文章或清除旧文章。
  • 执行sql-dump导出和导入
    • 路径是绝对路径,并且不会更新,因此链接等在新站点中都会被破坏。

注意:

Codex提供此multi-step solution,但我正在寻找更容易的东西。对于重复传输而言,这是不切实际的,例如在发布方案中。

6 个答案:

答案 0 :(得分:4)

没有避免这样做(据我所知)

  1. 您移动文件
  2. 使用phpMyAdmin中的导出/导入移动数据库
  3. 编辑您的配置(在/wp-config.php中)以反映新的数据库设置。
  4. 在phpMyAdmin中执行以下SQL:
  5. 更新网站设置选项:

    UPDATE wp_options SET 
        option_value = replace(option_value, 
                               'http://oldsite.com/path', 
                               'http://spankingnew.com/otherpath') 
    WHERE 
        option_name = 'home' 
    OR 
        option_name = 'siteurl';
    

    同时更新帖子内容和帖子/网址:

    UPDATE wp_posts SET 
        post_content = replace(post_content, 
                               'http://oldsite.com/path', 
                               'http://spankingnew.com/otherpath'),
        guid = replace(guid, 
                       'http://oldsite.com/path',
                       'http://spankingnew.com/otherpath');
    

    你应该完成..

    当然可能还有其他一些问题,但我已经这样做了几次。

    @Yarin指出有一种更容易的方式来更新网站网址:只需将网址设置重新编码为/wp-config.php。

    在/wp-config.php中,添加:

    define('WP_HOME','http://{my site path}');
    define('WP_SITEURL','http://{my site path}');
    

    无论您导入哪些数据,此set-and-forget都会自动更新数据库中的所有url路径。如果您不断地从其他站点导入数据,例如在开发生产发布方案中,它尤其有用。

答案 1 :(得分:2)

我发现一个更简单的方法是在像notepad ++

这样的东西中打开MySQL转储

然后执行查找并将http://www.oldsite.com替换为http://www.newsite.com

然后使用PHP MyAdmin导入转储

<强>修订

将wordpress网站从一个域移动到另一个域的主要问题之一主要在于存储数据库中设置的任何插件或主题。

通常的搜索和替换方法不起作用,因为某些主题或插件以序列化格式存储数据。

在你的主题插件中说你有一个名为site home的设置: 网站主页:http://oldsite.com&#39;

序列化它将存储在数据库中,如下所示:

{s:9:"site-home";s:18:"http://oldsite.com";}`

注意s:** 序列化数组存储字符串以及字符串中的字符数

所以,如果您按照前面所述进行标准搜索和替换

replacing http://oldsite.com to http://mynewsite.com

现在有20个字符不是18

但是,如上所述的标准搜索和替换只会更新匹配的字符串,字符数不会更新。

序列化数据将更改为{s:9:"url";s:18:"http://mynewsite.com";}

这就是破坏wordpress的原因,因为序列化数组中的数据现在已损坏,因为字符数不再正确。

我认为迁移wordpress网站的最佳工具是互联网上的一些人做的。

它检查序列化数组并更新字符数和标准字符串。

如果您要迁移wordpress网站,这是您应该使用的唯一工具。和它的免费

search and replace for wordpress database

答案 2 :(得分:1)

可能是迄今为止我发现的最干净的解决方案:http://wordpress.org/extend/plugins/duplicator/

答案 3 :(得分:0)

arnorhs是对的。还有一些我遇到过的事情:

  1. 某些主机(如MediaTemple的DV)不允许公共用户写文件,所以如果是这种情况(确保首先出现问题),你会想要/ wp-content / uploads /并确保它是chmod 777(或至少767)。所有子目录也必须相同。

  2. 有时我在将大文件导入mysql时遇到了麻烦。一个快捷方式是在文本编辑器中打开导出的sql文件,并将几千行复制到剪贴板,并将它们作为SQL调用粘贴到phpMyAdmin中。奇迹般有效。只需确保在SQL语句结束时结束副本。

答案 4 :(得分:0)

此答案基于arnorhs's以上,这是正确的 - 我只是想指出更简单的方式来更新网站网址:只需将网址设置重新编码为/ wp -config.php。

在/wp-config.php中,添加:

define('WP_HOME','http://{my site path}');
define('WP_SITEURL','http://{my site path}');

无论您导入哪些数据,此set-and-forget都会自动更新数据库中的所有url路径。如果您不断地从其他站点导入数据,例如在开发生产发布方案中,它尤其有用。

注意:如果您因此遇到服务器错误,则可能需要在管理面板中打开/关闭固定链接以获取要注册的网址路径)

有关详情,请参阅:Wordpress codex: Changing the Site URL


其他一些说明......

如果您尝试将网站内容移动/替换到另一个现有网站,您会:

  • 只需要复制'themes','plugins','uploads'和'includes / languages'文件夹的内容。 (如果我错了,请纠正我)
  • 想要在导入之前清除现有的MyQSL数据:选择所有表并在PhpMyAdmin中选择“空”。

答案 5 :(得分:0)

是的,WordPress中一个比较可怕的无证错误:(

我写了一个正确解决整个问题的插件 - http://wordpress.org/extend/plugins/root-relative-urls/

基本上它会将你的WordPress安装中的所有链接转换为root-relative(即以“/”开头,它们实际上等同于绝对url。)并且它将从域链接到图像和其他资源,因为它们被添加到TinyMCE编辑器中,因此当您创建新内容时,它也会智能地更改这些链接。

使用此插件,您可以通过IP地址,本地主机或您想要提供的任何别名访问您的开发站点。当您对数据进行数据库转储或者只使用导入/导出实用程序时,您的内容将按照您在生产中的预期工作。

如果您的开发环境与生产环境具有不同的根级别结构,但是您可以使用.htaccess重写规则来处理该边缘情况 - 它仍然无法工作 - 仍然无需执行危险搜索并替换导出的字符串操作sql数据。

它也不适用于子域名多站点安装,但这是一个更大的蠕虫。

相关问题