我正在尝试将部署的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 文件中设置内容。
非常感谢你。
答案 0 :(得分:12)
编辑:最近不得不再次迁移一个多站点,本指南从01 / 03-2016开始仍然可以正常工作。数据库编辑很糟糕,一个错误,你要么死白屏或连接数据库错误,所以要注意:)
我无法想出允许带协议的本地主机链接(http://),所以如果你看到"(http :) localhost"将其读作http:// localhost /。如果有人可以为我编辑这个太棒了!
编辑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');
如果您从localhost上传了.htaccess,请将其从服务器中删除。
你完成了!无需费心去做数据库更改。对于localhost安装,只需将WP_HOME和WP_SITEURL定义为localhost。
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"和"家庭"到(http)localhost /子文件夹(没有尾部斜杠)。
在表wp_blogs中:更改"域" to" localhost"和" path"每个子网站的每个条目/子文件夹/(必须有尾部斜杠)
在表wp_site中:更改"域" to" localhost"和" path" to / subfolder /(必须有斜杠)
在表wp_sitemeta中:更改" siteurl"到完整路径ie(http :) localhost /子文件夹/(必须有尾部斜杠)
现在您应该至少可以访问您的页面,如果您仍然获得重定向循环或白屏死机,请仔细检查数据库更改。现在登录管理员,我们需要更改数据库中的一些硬编码URL,我通常使用名为" Seach and replace"的插件执行此操作,因此下载并安装此插件,并通过键入内容来使用它它应该搜索(旧网址)以及用(新网址)替换它的内容。
Search for: http://mysitename.com
Replace with: (http:)localhost
现在希望您能够进行多站点的功能迁移。正如我所指出的那样,我已经做过几次这样的事情,如果一切正常,它几乎是随机的。我说这个方法在8次中有6次成功。
编辑:添加了如何迁移多站点。
答案 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插件