Wordpress:将多站点从服务器移动到本地主机
Posted
技术标签:
【中文标题】Wordpress:将多站点从服务器移动到本地主机【英文标题】:Wordpress: Move Multisite from server to localhost 【发布时间】:2015-01-07 17:45:08 【问题描述】:我正在尝试将已部署的 WordPress 多站点移动到本地环境。我备份了服务器数据库和文件。在我的本地环境中,我创建了一个新数据库并导入了备份。我还将服务器文件复制到我的本地计算机。
我做了这些步骤:
我更改了 wp-config.php 并将其更新为新的 db-name
、db-username
、db-password
并将 define('DOMAIN_CURRENT_SITE', 'www.mysitename.com');
设置为 define('DOMAIN_CURRENT_SITE', 'localhost/mysitename');
。
我将 wp-option 数据库表中的 option_value
更改为指向我的本地地址。
我还从 .htaccess 中删除了这些行:
# Redirect non-www urls to www
RewriteCond %HTTP_HOST !^www\.mysitename\.com
RewriteRule (.*) http://www.mysitename.com/$1 [R=301,L]
但是当我转到 127.0.0.1/mysitename 时,我得到了这个错误:这个网页有一个重定向循环。
当我将 define('DOMAIN_CURRENT_SITE', 'localhost/mysitename');
更改为 define('DOMAIN_CURRENT_SITE', 'localhost');
并转到 127.0.0.1/mysitename 地址时,它会显示 phpinfo() 页面。
如何解决我的问题?
请说明我是否必须在 .htaccess 和 wp-config.php 文件中进行设置。
非常感谢。
【问题讨论】:
您是否尝试过完全删除您的本地 .htaccess? @rnevius: 是的,当我删除 .htaccess 时,如果我设置了 define('DOMAIN_CURRENT_SITE', 'localhost'); 会再次显示 phpinfo() 页面;如果我将其设置为 define('DOMAIN_CURRENT_SITE', 'localhost/mysitename');它会显示这个错误:这个网页有一个重定向循环。 【参考方案1】:忍者的回答很有帮助。尽管您可以通过使用 wp-cli 进行数据库替换来缩短他的回答中描述的步骤数量,但您不需要任何第三方插件并手动编辑单个数据库单元。 wp-cli 的搜索替换功能非常完美,至少以我在普通 wp 网站的经验中如此。但结合忍者回答中的步骤,在我的情况下,它也适用于多站点。以下是关于如何安装 wp-cli 的详细说明:https://wp-cli.org
在所有站点中替换一个字符串:
wp search-replace //oldurl.com //dev.url.test --network
是的,url 字符串没有用引号括起来。根据我的经验,这种替换方式非常完美,没有任何使用引号可能出现的问题。
要替换特定站点中的字符串:
wp search-replace //oldurl.com //dev.url.test --url=https://oldurl.com
查看哪些网址映射到网站:
wp site list --network
虽然 db 替换效果很好。我必须先停用 wp-config.php 中的多站点(通过删除所有多站点常量定义)和所有插件,然后再从网络仪表板重新激活它们。
wp-cli 搜索替换文档: https://developer.wordpress.org/cli/commands/search-replace/
【讨论】:
【参考方案2】:对于使用 子域 的多站点来说,这很接近,但略有不同。您需要编辑主机文件以将每个站点 url 显示为 localhost(LINK):
C:\Windows\System32\drivers\etc
127.0.0.1 localhost
::1 localhost
127.0.0.1 localhost.com
127.0.0.1 subdom1.localhost.com
127.0.0.1 subdom2.localhost.com
etc..
然后,如上所述编辑数据库,忽略上述 .htaccess 之外的任何子目录更改,但将 Base 保留为 /
# MultiSite
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
在我的安装中,我需要更新一些页眉和页脚以加载样式。
感谢@ninja 为我指明了正确的方向!
【讨论】:
【参考方案3】:编辑:最近不得不再次迁移多站点,并且截至 2016 年 1 月 3 日,本指南仍然可以正常工作。数据库编辑非常花哨,一个错误,你要么得到白屏死机,要么连接到数据库出错,所以要注意:)
我无法确定是否允许使用协议 (http://) 进行 localhost 链接,因此如果您看到“(http:)localhost”,则将其读取为 http://localhost/。如果有人可以为我编辑,那就太好了!
正常的 Wordpress 迁移:
-
从 localhost 备份您的数据库。
在新服务器上新建数据库,在此处导入导出的数据库。
将所有 Wordpress 文件上传到服务器。
编辑 wp-config.php,更改数据库名称、用户名和密码。通常在 "define('WP_DEBUG'.. 我定义 "WP_HOME" 和 "WP_SITEURL" 下方,这些将覆盖 Wordpress 数据库设置的根路径。 “DOMAIN_CURRENT_SITE”用于多站点安装。所以如果不是多站点就不要用这个,如果是多站点就用这个而不是WP_HOME和WP_SITEURL。
define('WP_HOME', 'http://mysitename.com');
define('WP_SITEURL', 'http://mysitename.com');
如果您也从 localhost 上传了 .htaccess,请将其从服务器中删除。
访问http://mysitename.com/wp-admin,登录并转到永久链接设置,然后按保存以生成新的.htaccess。你就完成了!无需费心进行数据库更改。对于 localhost 安装,只需将 WP_HOME 和 WP_SITEURL 定义为 localhost。
如何迁移多站点:
Wordpress 中的多站点迁移起来很麻烦,它涉及多次数据库更改,即使您使所有内容都正确,它似乎也只能在某些时候正常工作而不会出错。但是,这些是推荐的步骤:
-
导出数据库,同上。
上传新数据库,同上。
添加所有的 Wordpress 文件,同上。
使用新的数据库信息编辑您的 wp-config.php,添加以下定义:
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false); // true or false depending if the paths for each multisite is pointed by a subdomain.
define('DOMAIN_CURRENT_SITE', 'localhost'); // localhost is the DOMAIN of the new location, so even if the ABS_PATH is localhost/whatever, you should have localhost here.
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
您应该在要导出的站点的 wp-config.php 中包含所有这些,因此只需从那里复制粘贴它们,然后编辑 DOMAIN_CURRENT_SITE。
像这样编辑您的 htaccess(Rewritebase /path/ 应该是相对路径,即如果您的网站位于 localhost/mypage 它应该是“RewriteBase /mypage/”):
# MultiSite
RewriteEngine On
RewriteBase /subfolder-from-localhost/
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %REQUEST_FILENAME -f [OR]
RewriteCond %REQUEST_FILENAME -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
数据库编辑时间!需要为您的多站点拥有的每个子站点执行这些步骤,如果我键入更改表“wp_site”,您应该在 wp_site1/wp_site2 等中复制它...
在表 wp_options 中:将字段“site_url”和“home”更改为 (http:)localhost/subfolder(没有尾部斜杠)。
在 wp_blogs 表中:将“域”更改为“localhost”,将每个子站点的每个条目的“路径”更改为 /subfolder/(必须有斜杠)
在 wp_site 表中:将“domain”更改为“localhost”,将“path”更改为 /subfolder/(必须有斜杠)
在 wp_sitemeta 表中:将“siteurl”更改为完整路径,即 (http:)localhost/subfolder/(必须有斜杠)
现在您至少应该可以访问您的页面,如果您仍然遇到重定向循环或死机白屏,请仔细检查数据库更改。现在登录到管理员,我们需要更改数据库中的一些硬编码 URL,我通常使用名为“Seach and replace”的插件来执行此操作,因此下载并安装此插件,并通过输入它应该搜索的内容来使用它(旧网址)以及用什么替换它(新网址)。
Search for: http://mysitename.com
Replace with: (http:)localhost
现在希望您已经完成了多站点的功能迁移。正如我所指出的,我已经这样做了几次,如果一切正常,它几乎看起来是随机的。我会说我在 8 次中可能有 6 次通过这种方法取得了成功。
编辑:添加了如何迁移多站点。
【讨论】:
或者只使用the Duplicator plugin,然后跳过所有这些。 ;-) @ninja:我也做了这些步骤,我写了我做了哪些步骤。我不知道的第一件事是我应该将“DOMAIN_CURRENT_SITE”设置为 localhost/mysitename 还是 localhost?第二件事是我有这个网页有一个重定向循环错误,所以我无法连接到 wp-admin。 @ElhamGdz 根本不使用 DOMAIN_CURRENT_SITE,只使用 WP_HOME 和 WP_SITEURL 除非它是多站点 wordpress 安装。你应该使用这些像 "define('WP_HOME', 'localhost/dir'); @ninja 我的网站是一个多站点,正如您在回答中解释的那样,如果使用多站点我应该使用我使用过的 DOMAIN_CURRENT_SITE。 @ninja...为了使用 markdown 在列表中显示代码,您需要缩进 8 个空格,而不是 4 个。【参考方案4】:您可以在link 上按照教程进行操作。它解释得很好,也很容易理解。
第 6 步的 PS 我建议你使用 Velvet Blues WordPress 插件
【讨论】:
以上是关于Wordpress:将多站点从服务器移动到本地主机的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress - ftp'd 站点/导出的数据库到本地主机,本地主机图像仍然指向 .com,为啥?