Litespeed/Apache环境下 使用.htaccess强制https访问

Litespeed和Apache下配置起来基本一样,我使用的是Litespeed环境,Apache的也一样。

在我们成功安装好SSL证书后,通过http和https都能访问到我们的站点,那么如何进行强制通过https访问呢?这时候就需要用到.htaccess这个强大的文件了。网站301的时候也是通过这个文件实现。

网上搜索后,发现这篇文章讲的通俗易懂而且非常全面,我就不客气的引用过来了。

如果顺利完成了上面的步骤,那么现在你的 WordPress 是既可通过 http:// 访问,也可通过 https:// 访问,但是,如果希望 http:// 的访问跳转到 https:// 呢?这就需要用到 mod_rewrite 了。由于这篇文章是针对 Apache 用户的,所以 nginx 的规则就不提了。

首先要确认 Apache 开启了 mod_rewrite(默认安装是不开的),如果没有开启的话,需要使用 sudo a2enmod rewrite 来开启并 sudo service apache2 restart 来重启 Apache。

如果有服务器的完全权限的话,可以在服务器的配置文件中加入以下代码,如果不能编辑配置文件的话,那在站点的目录中添加 .htaccess 文件加入以下代码也行。当然,站点配置中要设置 AllowOverride,才能使站点目录中的 .htaccess 起作用:(请把 wzyboy.im 换成你自己的 WordPress 域名)

RewriteEngine On
RewriteCond %{HTTPS} !on [NC]
RewriteRule (.*) https://wzyboy.im%{REQUEST_URI} [R=301,NC,L]

这段代码的意思是说:当检测到 HTTPS 未开启(!on 嘛)的时候,把请求重定向到 https:// 的对应 URI。Apache 的 mod_rewrite 是个很强悍且较通俗易懂的东西,完整的文档请看这里。如果是在站点配置文件中加入了这些代码,需要用 sudo service apache2 reload 重新载入配置文件才能生效。

嗯,现在再访问 http:// 的 WordPress 的话,全部会自动跳转到 https:// 版本的了。但是这样做有两个小问题:

  1. 目前搜索引擎中似乎只有 Google 能抓取 https:// 站点,而其他的搜索引擎都不抓取。
  2. 破烂 IE 是不支持 SNI 的(XP + IE8 及以下),因此对于这些用户来说,显示的依然是“证书错误”(其实是没有错误,是 IE 自己有错误)。

对应的解决方法自然也是有的,比如这样:(这段代码参考了 LvWind 的博客。请注意把 wzyboy.im 换成自己的域名)

RewriteEngine On
RewriteCond %{HTTPS} !on [NC]
RewriteCond %{HTTP_USER_AGENT} !(baiduspider|soso|bing|sogou|yahoo|sohu-search|yodao|robozilla|msnbot|msie|feedburner) [NC]
RewriteRule (.*) https://wzyboy.im%{REQUEST_URI} [R=301,NC,L]

这段代码比刚刚那段多加了一个判断条件,即判断访客的 User Agent 是否是搜索引擎或者 IE 用户,如果不是,那才跳转到 https:// 版的页面。注意,这里面是不包含 Google Bot(Google 的爬虫)的,在因为 Google 本身就是能抓取 https:// 站点的,没必要重定向。而 IE 用户则是像其他的非 Google 的搜索引擎一般看待了,保持不跳转。

当然,这还不是最绝的,如果你打算彻底放弃 IE 用户的话(我就打算这么干,我的博客的 IE 访问量不足 25%,XP + IE8 及以下的比例更是只有 12% 左右),可以这么干:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} msie [NC]
RewriteRule .* - [L,F]
RewriteCond %{HTTPS} !on [NC]
RewriteCond %{HTTP_USER_AGENT} !(baiduspider|soso|bing|sogou|yahoo|sohu-search|yodao|robozilla|msnbot|feedburner) [NC]
RewriteRule (.*) https://wzyboy.im%{REQUEST_URI} [R=301,NC,L]

这样的话,所有 IE 用户直接返回一个 403 给他们……甚至,如果你不想照顾 Google 以外的搜索引擎的话,连判断搜索引擎的那一行都可以省了……

另外,如果你决定这么干之后,你还可以在 WordPress 的后台设置中,把站点主页和 WordPress 的安装位置两个选项都改成 https:// 的,这样的话,哪怕是新上传的图片,也都是自动 https:// 路径了,这样,你的站点就会完全沉浸在 的世界中!记得那个谁说过[谁?],理想的互联网中,一切都是 https:// 的……

事实上,我在某个新建的站点上就是这么干的:把所有 IE 用户重定向到 403,并且强制所有非 IE 用户跳转到 https:// 页面,并且 WordPress 中的站点地址和安装路径都设置为 https:// 的……现在的效果就是:Analytics 中完全没有 IE 用户的存在;Google 中搜索 site:某站点.org 全是 https:// 的收录;其他搜索引擎啥也收录不到。

更多的大家可以直接前往原文进行查看。

注意,这些Rewrite代码必须放在WordPress自动生成的Rewrite代码前面,否则是不生效的,我就因为这个浪费了不少时间。

发表评论

电子邮件地址不会被公开。 必填项已用*标注