Wordpress:将多站点从服务器移动到本地主机

Posted

技术标签:

【中文标题】Wordpress:将多站点从服务器移动到本地主机【英文标题】:Wordpress: Move Multisite from server to localhost 【发布时间】:2015-01-07 17:45:08 【问题描述】:

我正在尝试将已部署的 WordPress 多站点移动到本地环境。我备份了服务器数据库和文件。在我的本地环境中,我创建了一个新数据库并导入了备份。我还将服务器文件复制到我的本地计算机。

我做了这些步骤:

    我更改了 wp-config.php 并将其更新为新的 db-namedb-usernamedb-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() 页面。

如何解决我的问题?

请说明我是否必须在 .htaccesswp-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:将本地主机数据库导入实时站点时出现问题

WordPress 本地主机站点重定向到实时站点

Wordpress - ftp'​​d 站点/导出的数据库到本地主机,本地主机图像仍然指向 .com,为啥?

XAMPP wordpress LAN,重定向到本地主机

php WP-CLI脚本,用于将多站点实例从一个域移动到另一个域

访问本地托管的 Wordpress 站点时出现问题(重定向+其他废话)