跳至正文

在 WordPress(Apache 服务器)中强制 HTTP 到 HTTPS

您应该始终使用 HTTPS 加载您的网站。除了保护您的网站和网站用户之间的数据完整性之外,HTTPS 现在是许多新浏览器 API(例如Geolocation API)的要求

HTTPS 还在Google SERP 排名信号中承担一定的权重因此,确保您的站点始终从 HTTPS 加载至关重要。在本教程中,我们将向您展示如何使用 Apache 执行此操作。

请注意,在继续执行此步骤之前,请确保您已在服务器中安装并加载了 SSL 证书。否则,请查看我们关于网站 SSL 证书初学者指南的教程。

如果一切就绪,您可以继续下一步。

HTTP 到 HTTPS

如果您的 WordPress 网站可以直接访问,http://www.domain.com并且您希望将所有访问者从 HTTP 引导到 HTTPS,请尝试以下任一 .htaccess 代码。

选项1:
1个
2个
3个
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
选项 2:
1个
2个
3个
RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
解释

选项 1 和 2 都将重定向任何http://www.domain.com访问https://www.domain.com

选项 1代码将检查连接是否为 TLS/SSL,而选项 2代码将检查站点是否80在默认情况下为 HTTP 端口号的端口上运行。

“非 www”> “www” & HTTP > HTTPS

如果你想强制“非 www”到“www”,以及 HTTP 到 HTTPS,那么上面的 .htaccess 代码是不够的。

客观地说,如果您的目标是重定向以下 URL:

  • http://www.domain.com

  • http://domain.com

到:

  • https://www.domain.com

然后您将需要使用下面的 .htaccess 代码。

1个
2个
3个
4个
5个
6个
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$ [NC]
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
 
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
解释

首先,它将任何“非 www”重定向到“www”,然后检查 HTTPS,确保最终结果是:www + HTTPS。

“非 www”> “www” & HTTP > HTTPS(在子文件夹中)

现在,如果您像我们一样将您的 WordPress 网站托管在子文件夹(即www.domain.com/blog/)中,那么上述 .htaccess 代码将无法完美运行。

这里的目标是将所有 URL(无论是主页还是帖子页面)重定向到 www + HTTPS URL。

让我们看一下我们需要重定向“”和重定向“”的 URL 的所有可能性。

条件一

我们需要重定向以下所有网址:

  • http://domain.com

  • http://www.domain.com

  • http://domain.com/blog/

  • http://www.domain.com/blog/

到一个统一的 URL:

  • https://www.domain.com/blog/

条件二

并发布网址:

  • http://domain.com/blog/example-page/

  • http://www.domain.com/blog/example-page/

到:

  • https://www.domain.com/blog/example-page/

当您的 WordPress 托管在子文件夹(例如/blog/)中时,您可能会有两个 .htaccess 文件,即一个在子文件夹外的 .htaccess 文件,一个在安装 WordPress 的子文件夹内。我们需要改变它们。

.htaccess
博客/
博客/.htaccess
.htaccess 在子文件夹外

将以下代码插入到子文件夹外的 .htaccess 中。

1个
2个
3个
4个
5个
6个
7
8个
RewriteEngine On
### non-www to www, http to https
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^domain.com$ [OR]
RewriteRule (.*) https://www.domain.com/$1 [R=301,L]
 
### subfolder
RewriteRule ^$ /blog/ [R=301]

下面是这部分代码的作用。首先,它确保使用 HTTPS 将域重定向到 www,然后将其重定向到子文件夹。这将满足上面提到的#condition 1,但它不适用于条件#2,至少现在还不行。

.htaccess 子文件夹内

接下来,我们需要更改子文件夹中的 .htaccess 代码。

默认情况下,它应该是这个样子:

1个
2个
3个
4个
5个
6个
7
8个
9
10
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

将以下 .htaccess 代码放在顶部,在“# BEGIN WordPress”之前

1个
2个
3个
4个
5个
6个
<IfModule mod_rewrite.c>
RewriteEngine On
## http to https
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

有了这两组代码,它将确保输入的任何 URL 都将包含在 www 和 HTTPS 中。

我敦促您不要在您的实时站点上实施此操作。在暂存/测试站点上多次尝试,确保在实际部署之前获得所需的结果。

还有一件事,为确保您的重定向准确无误,请务必在开始每次测试之前清除浏览器 cookie 和缓存。

标签: