最近中国移动的流量劫持到了令人发指的地步,凡是没有使用HTTPS
的网址都会被劫持,非常影响用户体验。如下图所示(右下角):
由于暂时还不宜全站都迁移到HTTPS
,因此,比较简单的解决方法就是判断来源方,如果来源方是来自移动端的,都强制定位到HTTPS
。
在Apache
的.htaccess
文件中增加如下内容:
1 2 3 4 5 6 7 |
#来自移动端的设备,强制重定向到HTTPS模式,规避运营商的页面劫持 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos|mobile" [NC] RewriteRule ^$ https://%{SERVER_NAME}/$1 [R,L] </IfModule> |
需要注意的问题
如果服务器使用Let's Encrypt免费SSL(目前(2022/02/27)最新的1.23.0版本),在生成/更新证书的时候,会提示用户是否全站都迁移到HTTPS。如果不小心同意了这个选项,对于Apache服务器来说,会在配置文件中增加如下内容:
1 2 3 4 5 6 |
RewriteEngine on RewriteCond %{SERVER_NAME} =www.xxx.com [OR] RewriteCond %{SERVER_NAME} =xxx.com [OR] RewriteCond %{SERVER_NAME} =xxxxx.com [OR] RewriteCond %{SERVER_NAME} =www.xxxxx.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] |
这个配置会覆盖我们在网站目录下的HTTPS相关设置(.htaccess),导致我们的配置无效,那么需要手工移除这些自动生成的配置信息,然后重启Apache服务。