Wordpress:将Multisite从服务器移动到localhost

时间:2014-11-11 08:19:47

标签: php wordpress .htaccess

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

我做了以下步骤:

  1. 我更改了 wp-config.php 并使用新的db-namedb-usernamedb-password进行了更新,并设置了define('DOMAIN_CURRENT_SITE', 'www.mysitename.com');define('DOMAIN_CURRENT_SITE', 'localhost/mysitename');

  2. 我更改了 wp-option 数据库表中的option_value以指向我的本地地址。

  3. 我还从 .htaccess

    中删除了这些行
    # Redirect non-www urls to www
    RewriteCond %{HTTP_HOST} !^www\.mysitename\.com
    RewriteRule (.*) http://www.mysitename.com/$1 [R=301,L]
    
  4. 但是当我转到 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 文件中设置内容。

    非常感谢你。

4 个答案:

答案 0 :(得分:12)

编辑:最近不得不再次迁移一个多站点,本指南从01 / 03-2016开始仍然可以正常工作。数据库编辑很糟糕,一个错误,你要么死白屏或连接数据库错误,所以要注意:)

我无法想出允许带协议的本地主机链接(http://),所以如果你看到"(http :) localhost"将其读作http:// localhost /。如果有人可以为我编辑这个太棒了!

普通Wordpress迁移:

  1. 从localhost备份数据库。
  2. 在新服务器上创建新数据库,在此处导入导出的数据库。
  3. 将所有Wordpress文件上传到服务器。
  4. 编辑wp-config.php,更改了数据库名称,用户名和密码。通常在"定义(' WP_DEBUG' ...我定义" WP_HOME"和" WP_SITEURL&#34 ;,这些将覆盖Wordpress数据库设置以获取root的路径。 " DOMAIN_CURRENT_SITE"用于多站点安装。因此,如果它不是多站点,请不要使用它,如果它是多站点,请使用此而不是WP_HOME和WP_SITEURL。

    define('WP_HOME', 'http://mysitename.com');
    define('WP_SITEURL', 'http://mysitename.com');
    
  5. 如果您从localhost上传了.htaccess,请将其从服务器中删除。

  6. 访问http://mysitename.com/wp-admin,登录并转到永久链接设置,然后按“保存”以生成新的.htaccess。
  7. 你完成了!无需费心去做数据库更改。对于localhost安装,只需将WP_HOME和WP_SITEURL定义为localhost。

    如何迁移多站点:

    Wordpress中的多站点是一个痛苦的迁移,它涉及几个数据库更改,甚至当你使一切正确时,似乎只有一些时间没有错误。但是,这些是建议的步骤:

    1. 导出数据库,与上述相同。
    2. 上传新数据库,与上述相同。
    3. 添加所有Wordpress文件,与上面相同。
    4. 使用新的数据库信息编辑您的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);
      
    5. 您应该在要导出的网站的wp-config.php中包含所有这些内容,因此只需从中复制粘贴它们,然后编辑DOMAIN_CURRENT_SITE。

      1. 像这样编辑你的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]
        
      2. 数据库编辑时间!这些步骤需要为您的多站点拥有的每个子站点完成,如果我键入更改表" wp_site",您应该在wp_site1 / wp_site2等中复制它...

      3. 在表wp_options中:更改字段" site_url"和"家庭"到(http)localhost /子文件夹(没有尾部斜杠)。

        在表wp_blogs中:更改"域" to" localhost"和" path"每个子网站的每个条目/子文件夹/(必须有尾部斜杠)

        在表wp_site中:更改"域" to" localhost"和" path" to / subfolder /(必须有斜杠)

        在表wp_sitemeta中:更改" siteurl"到完整路径ie(http :) localhost /子文件夹/(必须有尾部斜杠)

        1. 现在您应该至少可以访问您的页面,如果您仍然获得重定向循环或白屏死机,请仔细检查数据库更改。现在登录管理员,我们需要更改数据库中的一些硬编码URL,我通常使用名为" Seach and replace"的插件执行此操作,因此下载并安装此插件,并通过键入内容来使用它它应该搜索(旧网址)以及用(新网址)替换它的内容。

          Search for: http://mysitename.com
          Replace with: (http:)localhost
          
        2. 现在希望您能够进行多站点的功能迁移。正如我所指出的那样,我已经做过几次这样的事情,如果一切正常,它几乎是随机的。我说这个方法在8次中有6次成功。

        3. 编辑:添加了如何迁移多站点。

答案 1 :(得分:0)

This is close but a little different for a multisite that uses subdomains. You are required to edit your host file to show each site url as 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..

Then, editing the database as stated above worked, ignoring any subdirectory changes beyond the .htaccess mentioned above but leaving the Base as /

 # MultiSite

 RewriteEngine On

 RewriteBase /

 RewriteRule ^index\.php$ - [L]

In my install, I needed to update some across the headers and footers to get the styles to load.

Thanks to @ninja for pointing me in the right direction!

答案 2 :(得分:0)

忍者的回答很有帮助。尽管可以通过使用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

要查看将哪些URL映射到站点:

wp site list --network

尽管数据库替换效果很好。我必须先停用wp-config.php中的多站点(通过删除所有多站点常量定义)和所有插件,然后再从网络仪表板上重新激活它们。

wp-cli搜索替换文档: https://developer.wordpress.org/cli/commands/search-replace/

答案 3 :(得分:-1)

您可以按照本link的教程进行操作。它的解释非常好,而且很容易理解。

PS for step 6我建议你使用Velvet Blues WordPress插件