Apache中设置来自移动端的请求强制重定向到HTTPS规避运营商的页面劫持

最近中国移动的流量劫持到了令人发指的地步,凡是没有使用HTTPS的网址都会被劫持,非常影响用户体验。如下图所示(右下角):


由于暂时还不宜全站都迁移到HTTPS,因此,比较简单的解决方法就是判断来源方,如果来源方是来自移动端的,都强制定位到HTTPS

Apache.htaccess文件中增加如下内容:

#来自移动端的设备,强制重定向到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服务器来说,会在配置文件中增加如下内容:

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服务。

参考链接


发布者

发表回复

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