将站点从 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

  1. 安装 ssl 证书(按照由 发行人)
  2. 转到您的数据库; wp_options table 并更改 'siteurl' 和 'home' 选项值以 https 开头而不是 http 和 offcourse 保存更改。
  3. 登录到您的 WordPress 管理面板,然后转到 设置 » 常规。单击保存选项。这将确保网站 url 在其他任何需要的地方得到更正。
  4. 然后转到 设置 » 永久链接 并单击保存以确保所有 post 链接都是工作正常。

  5. 安装此插件 Search & Replace 并激活。该插件应该通过更新路径来帮助修复图像和断开的链接,而无需编写代码;不言自明。

  6. 安装此插件 Easy HTTPS Redirection 并激活。这个插件会将所有流量从 http 重定向到 https,不管是什么;您还可以定义不想强制使用 https 的页面。

是的,我同意你的观点,即 WP Force SSL 插件对网站产生了奇迹,我已经尝试过了,但我并没有从中吸取教训,但我仍然会尝试一下。此时您的“https://example.com”将完美运行

其次,我将解释如何在不使用任何插件的情况下执行相同的过程。我的假设同上。

  1. 重复上面的步骤 1 和 2。
  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

  3. 进行搜索和替换总是好的
  4. 要从 http 重定向到 https,我们将使用 .htaccess 文件。在 .htaccess 文件

    中使用 mod_rewrite 尝试以下操作
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

  5. 中给出的各种方法中的任何一种

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 服务器,上述代码将无法正常工作。如果需要我可以分享程序。