将 WordPress 站点从本地计算机移动到服务器(反之亦然)时,该站点停止工作。更改站点可用的域时会发生类似的问题。
无法操作的迹象非常不同——某些页面不显示、媒体文件库中的图片不显示、样式不加载、滑块不工作等等。
这种行为的原因是什么以及如何正确迁移 WordPress 站点或更改其域?
将 WordPress 站点从本地计算机移动到服务器(反之亦然)时,该站点停止工作。更改站点可用的域时会发生类似的问题。
无法操作的迹象非常不同——某些页面不显示、媒体文件库中的图片不显示、样式不加载、滑块不工作等等。
这种行为的原因是什么以及如何正确迁移 WordPress 站点或更改其域?
如何转移网站?(TL;DR)
有必要使用专门为此设计的软件工具。下面提到的程序通过重新计算字符串的长度来正确处理序列化数据。
对我个人来说,最简单和最自动化的解决方案似乎是Duplicator插件,它获取本地站点的副本,提供 2 个文件供下载:.zip 和 installer.php,必须将其转移到新服务器并运行安装程序。 php 那里。该插件将自动完成其余的工作。在大多数情况下,使用此插件仅传输数据库并通过 FTP 复制文件是有意义的。
数据库搜索和替换脚本将帮助您正确更改数据库。然而,要做到这一点,用户必须了解他在做什么,例如知道哪些路径在旧站点上,哪些在新站点上。
WP Migrate DB插件允许您正确准备数据库以进行迁移。要完成该过程,用户必须使用 phpMyAdmin 在新服务器上导入数据库。
WordPress 命令行界面 (WP-CLI)允许您使用单个命令转换数据库。例如,要转换
http://site.ru
为https://site.org
:对于多站点,情况稍微复杂一些。Duplicator 和All-in-One WP 迁移插件仅在付费版本中迁移它们。
我不知道任何免费的多站点迁移插件。如果您想免费进行多站点传输,您可以复制数据库,然后使用数据库搜索和替换。
迁移问题的原因
首先,出现问题是因为WordPress 数据库中的所有链接都存储为绝对链接。例如,指向网站图标的链接如下所示:
为了使站点在新域(例如
https://newsite.org
)上正常工作,数据库中的链接必须更改为请注意,即使网站从
http
到的简单翻译,也https
必须更改数据库中的所有链接!在 WordPress 中使用绝对链接背后有严重的原因。查看这个StackOverflow答案以获得解释。其中,给出了 WordPress 的主要开发人员之一的意见。使用绝对链接时出现的唯一问题是网站的转移。但是,转移具有相对链接的站点通常会带来更大的问题。提到的答案也讨论了这一点。
迁移问题的第二个原因是数据库中的序列化数据。所有现代插件(包括 WooCommerce、滑块、各种可视化编辑器,如 Visual Composer)、主题 - 以序列化形式将数据存储在数据库中。这些是字符串压缩的数组和对象。几个例子:
关于二十七主题的最后编辑文件的信息:
喷气背包数据
来自流行的网站备份插件 BackWPUp 的数据
在所有示例中,您都可以找到服务器上站点文件夹的路径:
/var/www/test/
.这是非常流行的 SEO 插件 Yoast 中保存设置的示例
在这里,我们在序列化数据中看到一行提及域:
href=\"http://test.kagg.eu/wp-admin/?page=wpseo_configurator\"
. 它不仅被序列化,而且被转义(\"
)。第三个原因是数据库中存在文件路径。它们不仅可以来自 WordPress 根目录,还可以来自主机帐户的用户主目录,甚至可以来自 Web 服务器的根目录(一些插件会这样做)。路径可以表示为常规字符串或序列化数据(上面的第一个示例)。转移到另一个主机时,它们也需要更改。
如果您只是将数据库原样转移到新服务器会发生什么?显然,与包含先前域的文件路径和链接相关的内容将停止工作。
该怎么办?显然,将文件的路径更改为新文件的路径和数据库中的域名。问题是如何。完全不合适的是经常可以找到的三个坏建议:
将数据库中的表记录中的
wp_options
coption_name
=替换为新的域名。仅适用于最原始的网站。siteurl
home
将数据库转储到 .sql 文件,并对路径和域进行文本替换,然后将数据库上传到新服务器。这是破坏基地的直接途径。序列化的数据将被彻底破坏。
发送几个将更改域的 SQL 查询。同上——这是破坏基地的直接途径。序列化的数据将被彻底破坏。
考虑上面带有序列化数据的第一个示例。在文本替换之后
/var/www/test/
,比如说,/home/i/account-name/site-name.org/public_html
(如在一个流行的主机上),从该行得到一个字符串
只有它的长度不再是 46 个字符,WordPress 将无法从数据库中读取这些序列化数据。
因此,所有三个“流行”的建议都必须被认为是有害的。
使用 WP All-in-one Migration 插件,您将不会遇到这些问题!
1、本地服务器的域名必须和真实域名一致,最多支持HTTP和HTTPS协议,有WWW,无WWW。如果不是,则使其相同。
2.如果它们不匹配,请更正路径。
3. 你把站点转移到其他类型的服务器上,比如你有Apache(本地),并且真实服务器上安装了nginx php-fpm - 由于php代码的安全性,许多插件可能无法工作,或者糟糕的服务器配置,例如,如果它被框架化,代码可能会失败
代替