您应该始终使用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,因为从技术上讲,站点可以在port外部使用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(在子文件夹中)
现在,如果您像我们一样在一个子文件夹(即www.domain.com/blog/
)中托管WordPress网站,则上述.htaccess代码将无法完美运行。
此处的目标是将所有URL(无论是首页还是帖子页)都重定向到www + HTTPS URL。
让我们看一下将“ 从 ”重定向到 “” 并将URL 重定向到 “” 的URL的所有可能性。
条件1
我们需要重定向以下所有URL:
http://domain.com
http://www.domain.com
http://domain.com/blog/
http://www.domain.com/blog/
统一为以下网址:
https://www.domain.com/blog/
条件2
并发布以下网址:
http://domain.com/blog/example-page/
http://www.domain.com/blog/example-page/
至:
https://www.domain.com/blog/example-page/
当您的WordPress托管在子文件夹(Eg /blog/
)中时,您将有两个.htaccess文件,即在子文件夹外部有一个.htaccess文件,而在安装WordPress的子文件夹内部有一个.htaccess文件。我们将需要同时更改它们两者。
.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和缓存。