将站点从 http 迁移到 https 和 SSL
migrating site to from http to https and SSL
过去我很幸运,当时我必须将网站从 HTTP 迁移到 HTTPS 并安装一个 SSL 证书,我的主机会这样做并且一切正常。
我现在正在与房东合作,我认为我需要更多的动手能力。
我在 Mysql 和 Apache 堆栈上使用 Wordpress。迁移它的正确方法是什么。通过数据库进行搜索和替换,然后通过 .htaccess 文件重定向?
目前,我有“https://example.com" working. However, what is the proper way to handle the redirects from www to non-www for both the http and https to "https://example.com”。有 "force" SSL 的 Wordpress 插件,但我听说这些插件可以做一些意想不到的事情。
谢谢
首先,我将解释不使用 .htaccess 文件的过程:
假设你有你的 wordpress 网站说“http://example.com”
- 安装 ssl 证书(按照由
发行人)
- 转到您的数据库; wp_options table 并更改
'siteurl' 和 'home' 选项值以 https 开头而不是
http 和 offcourse 保存更改。
- 登录到您的 WordPress 管理面板,然后转到 设置 » 常规。单击保存选项。这将确保网站 url 在其他任何需要的地方得到更正。
然后转到 设置 » 永久链接 并单击保存以确保所有 post 链接都是工作正常。
安装此插件 Search & Replace 并激活。该插件应该通过更新路径来帮助修复图像和断开的链接,而无需编写代码;不言自明。
- 安装此插件 Easy HTTPS Redirection 并激活。这个插件会将所有流量从 http 重定向到 https,不管是什么;您还可以定义不想强制使用 https 的页面。
是的,我同意你的观点,即 WP Force SSL 插件对网站产生了奇迹,我已经尝试过了,但我并没有从中吸取教训,但我仍然会尝试一下。此时您的“https://example.com”将完美运行
其次,我将解释如何在不使用任何插件的情况下执行相同的过程。我的假设同上。
- 重复上面的步骤 1 和 2。
不要离开你的数据库,我们需要使用 SQL 查询在 MySQL 中进行搜索和替换。我在下面的 SQL 查询
中列出了一些需要替换的东西
UPDATE wp_posts
SET guid = replace(guid, 'http://example.com', 'https://example.com');
UPDATE wp_posts
SET post_content = replace(post_content, 'http://example.com', 'https://example.com');
UPDATE wp_postmeta
SET meta_value = replace(meta_value,'http://example.com', 'https://example.com');
注意:根据您拥有的 table,根据 table
进行搜索和替换总是好的
要从 http 重定向到 https,我们将使用 .htaccess
文件。在 .htaccess
文件
中使用 mod_rewrite 尝试以下操作
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
或
中给出的各种方法中的任何一种
http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html
如果您的提供商已禁用 .htaccess
,您也可以从 PHP 中解决此问题(这不太可能,因为您要求它,但无论如何)
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
'Location: https://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
));
exit();
}
}
到目前为止,这两种方法 https 应该都能正常工作。
然后,要将 non-www 重定向到 www,请直接在 .htaccess 文件中的 RewriteEngine On 下面使用以下代码:
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]
对于 www 到 non-www,请使用:
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/ [L,R=301]
如果您使用的是 Windows IIS 服务器,上述代码将无法正常工作。如果需要我可以分享程序。
过去我很幸运,当时我必须将网站从 HTTP 迁移到 HTTPS 并安装一个 SSL 证书,我的主机会这样做并且一切正常。
我现在正在与房东合作,我认为我需要更多的动手能力。
我在 Mysql 和 Apache 堆栈上使用 Wordpress。迁移它的正确方法是什么。通过数据库进行搜索和替换,然后通过 .htaccess 文件重定向?
目前,我有“https://example.com" working. However, what is the proper way to handle the redirects from www to non-www for both the http and https to "https://example.com”。有 "force" SSL 的 Wordpress 插件,但我听说这些插件可以做一些意想不到的事情。
谢谢
首先,我将解释不使用 .htaccess 文件的过程: 假设你有你的 wordpress 网站说“http://example.com”
- 安装 ssl 证书(按照由 发行人)
- 转到您的数据库; wp_options table 并更改 'siteurl' 和 'home' 选项值以 https 开头而不是 http 和 offcourse 保存更改。
- 登录到您的 WordPress 管理面板,然后转到 设置 » 常规。单击保存选项。这将确保网站 url 在其他任何需要的地方得到更正。
然后转到 设置 » 永久链接 并单击保存以确保所有 post 链接都是工作正常。
安装此插件 Search & Replace 并激活。该插件应该通过更新路径来帮助修复图像和断开的链接,而无需编写代码;不言自明。
- 安装此插件 Easy HTTPS Redirection 并激活。这个插件会将所有流量从 http 重定向到 https,不管是什么;您还可以定义不想强制使用 https 的页面。
是的,我同意你的观点,即 WP Force SSL 插件对网站产生了奇迹,我已经尝试过了,但我并没有从中吸取教训,但我仍然会尝试一下。此时您的“https://example.com”将完美运行
其次,我将解释如何在不使用任何插件的情况下执行相同的过程。我的假设同上。
- 重复上面的步骤 1 和 2。
不要离开你的数据库,我们需要使用 SQL 查询在 MySQL 中进行搜索和替换。我在下面的 SQL 查询
中列出了一些需要替换的东西UPDATE wp_posts SET guid = replace(guid, 'http://example.com', 'https://example.com'); UPDATE wp_posts SET post_content = replace(post_content, 'http://example.com', 'https://example.com'); UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://example.com', 'https://example.com');
注意:根据您拥有的 table,根据 table
进行搜索和替换总是好的
要从 http 重定向到 https,我们将使用
中使用 mod_rewrite 尝试以下操作.htaccess
文件。在.htaccess
文件RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
或
中给出的各种方法中的任何一种
http://www.askapache.com/htaccess/http-https-rewriterule-redirect.html
如果您的提供商已禁用 .htaccess
,您也可以从 PHP 中解决此问题(这不太可能,因为您要求它,但无论如何)
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
'Location: https://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
));
exit();
}
}
到目前为止,这两种方法 https 应该都能正常工作。
然后,要将 non-www 重定向到 www,请直接在 .htaccess 文件中的 RewriteEngine On 下面使用以下代码:
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/ [L,R=301]
对于 www 到 non-www,请使用:
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/ [L,R=301]
如果您使用的是 Windows IIS 服务器,上述代码将无法正常工作。如果需要我可以分享程序。