我应该怎么做才能将MultiSite从HTTP转换为HTTPS?


8

我的任务是将多站点实例中的大约100个站点转换为HTTPS。

我可以轻松地编写脚本来访问数据库,并将siteurlhome值更改为HTTPS,这又将迫使站点将脚本排入队列,并在将来将图像嵌入HTTPS,对吗?

好吧,我还将需要遍历所有内部链接的post_content以及使用HTTP的图像,并将其转换为HTTPS。

我可能可以一起鞭打一些东西,但是我想知道我还需要改变什么。GUID对吗?如果使用$ wpdb命令,之后是否需要重新序列化数据库?

我应该先问一下,是否有一个可靠的插件可以帮我解决这个问题?关于此过程,我还需要了解什么?

注意-我们已经拥有所有SSL证书,因此我不必担心。-服务器正在运行linux(redhat)和apache-多站点正在使用子目录-我不知道其他多少,服务器不在我的管辖范围内


您的多站点使用子目录还是子域?您正在使用什么Web服务器(Apache,nginx等)?这与您要购买的SSL证书类型有关。
Pat J

谢谢Pat,我用您所询问的信息编辑了我的问题。
rugbert 2015年

自动查找和替换时要小心-如果数据库中已序列化数据,则更http改为https如果您也不要更改字符串长度,则会破坏数据!
史蒂文(Steven)

嗨@rugbert,你能解决这个问题吗?只是检查我的答案是否对您的问题有所帮助。
伊桑·金克斯·奥沙利文

Answers:


1

如果您希望进行干净的设置,则可以运行脚本以将所有URL和guid更新为https。

但也请考虑以下替代方法:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R,L]
</IfModule>

在wp-config.php中作为后端:

define('FORCE_SSL_ADMIN', true);

在wp-config.php中作为前端(或运行db UPDATE脚本):

define('WP_HOME','https://example.com');
define('WP_SITEURL','https://example.com');

然后,您可以简单地运行脚本以更新所有wp_posts内容url。


0

此过程实际上涉及购买安全证书,并将其应用于网站的服务器。反过来,这将迫使每个通过您的服务器提供的证书访问安全连接的人。这些证书称为SSL证书:http ://www.DigiCert.com/SSL-Certificates


感谢John,我忘了提到我们拥有所有SSL证书。
rugbert 2015年

好的,在这种情况下,是否已经应用了证书,并且所有站点都正确地重新列出了DNS文件?我必须问您是在现场托管还是与第三方托管?服务器环境是什么操作系统?
约翰·露西

我们正在使用第三方进行托管。我没有太多信息或无法访问服务器,但是它是运行Apache的Redhat Linux服务器。我对DB所需的内容更加满意
rugbert

1
我认为不必对数据库做任何事情。SSL是服务器端而不是数据库。我的建议是确保已将证书应用于服务器,并在您的URL中使用https进行验证以测试有效性。如果该网站出现,您应该可以只输入不带https的旧URL,它将自动带您进入https。自从我部署了证书以来已经有一段时间了,很遗憾,我无法帮助您完成这些步骤,但是您的工程师应该能够为您以及服务器上的DNS重定向文件为您解决该问题,以更正url服务器端。
约翰·露西

0

进行此数据修改的一种可能方法是在终端上使用WP-CLI

首先,您应该确保有备份和可靠的还原策略,以防万一出现问题。您还应该使用实时数据库的副本在本地或测试系统上测试此过程。

基本步骤是遍历网络的每个站点,并使用WP-CLI的search-replace命令替换每个站点的URL 。

这是一个时髦的单线:

for SITE in $(wp site list --field=url); do wp search-replace "{$SITE}" "${SITE/http:/https:}" --dry-run --precise --network --verbose; done

让我们检查一下:

for SITE in $(wp site list --field=url);

那将为内部命令输出的每一行启动一个循环,$()并将每一行写入变量$SITE

$(wp site list --field=url)

这就是WP-CLI site list命令,它为您提供了网络中所有站点URL的列表。仅运行此命令,您可能会看到类似以下内容的信息:

http://your-site.tld/
http://your-site.tld/site2/
http://another-of.your-site.tld/
...

现在

...); do

只会开始内循环部分。

内部循环命令发挥了所有作用(为了\便于阅读,我将其分为两行):

wp search-replace "$SITE" "${SITE/http:/https:}" \
--dry-run --precise --network --verbose

我们告诉WP-CLI以搜索$SITE(例如https://your-site.tld/)和更换用略加修改它:${SITE/http:/https:}。这是一个bash字符串替换操作替换http:https:。(因此,解析变量后,该命令将类似于wp search-replace "http://your-site.tdl/" "https://your-site.tld/")。

search-replace有许多可能的选项,在文档中进行了介绍。在示例中,我使用了这些:

--dry-run --precise --network --verbose

--dry-run--verbose用于测试的命令显然很有帮助。

--network 将搜索和替换操作也应用于网络表格。

--precise告诉WP-CLI使用PHP而不是SQL来搜索和替换值。这样可以确保序列化的值不会损坏。

最后,用

; done

让我再次强调一下:在开始将其用于生产之前,请对此进行深入测试。您应该了解它的工作方式以及WP-CLI的作用。之前,我曾使用WP-CLI执行这种搜索和替换操作,以将多站点迁移到其他域名,但没有从切换httphttps

可能存在一些极端情况:WP-CLI仍然读取,wp-config.php并尝试使用中的常量在数据库中找到匹配的“网络” wp-config.php。如果要操作一个站点(数据库)而不是另一个站点(中的常量wp-config.php),则可能会遇到麻烦。但是,对于你的情况,我认为这不会是一个问题,因为WP通常依赖于DOMAIN_CURRENT_SITEPATH_CURRENT_SITE他们无论如何都不会改变。但是,再次进行彻底测试。

使用更多的bash魔术,您还可以将此循环分成5个或10个站点的块,并逐步进行。



您以错误的方向提出问题。正确的选择是:为什么要使用这个插件?与描述的CLI方法相比有什么好处?
大卫,

0

为确保您的所有网站都在中使用HTTPS post_content,您可以执行以下两种选择之一:

1.后端:执行SQL查询

要确保将所有HTTP链接都设置为HTTPS,请使用以下SQL查询:

UPDATE wp_options SET option_value = replace(option_value, 'OLD_URL', 'NEW_URL') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'OLD_URL','NEW_URL');
UPDATE wp_posts SET post_content = replace(post_content, 'OLD_URL', 'NEW_URL');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'OLD_URL','NEW_URL');
  • OLD_URL将被替换为http://example.com(非HTTP)
  • NEW_URL将被替换为https://example.com(HTTPS)

这将覆盖siteurlhome和所有在您的网站到新的HTTPS内容。

2.前端:使用“ 搜索并替换”插件

一种更加用户友好的方法是使用“ 搜索和替换”插件轻松替换包含旧HTTP的所有表,并将其更改为HTTPS。该过程易于使用,您可以在应用这些更改之前预览将影响哪些表和行。

预警

在应用任何更改之前,我认为不用说总是在发生问题时备份数据库。


0

HTTP是默认协议,大多数网站都使用HTTP来处理Web上的信息。您的网站正在HTTPS上运行,没有任何错误消息,这意味着您的证书已正确安装。您应该将整个网站从HTTP迁移到HTTPS。

了解如何将WordPress的HTTP转移到HTTPS

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.