您应该始终使用 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 端口号的端口上运行。
注意:通常最好使用选项 1代码。语法更具表现力,无论端口号如何,它都会重定向到 HTTPS,因为从技术上讲,站点可以使用 HTTP 外部端口加载80
。
“非 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 和缓存。