我正在尝试找到最佳方法,而不会影响不受支持的SNI浏览器。我决定使用我在stackoverflow上找到的规则并对其进行修改,以便将每个键入mywebsite.com
的用户重定向到www.mywebsite.com
,如果浏览器支持SNI,则会重定向到https://www.mywebsite.com
否则会将它们重定向到http://www.mywebsite.com
在Apache上托管多个网站(相同的IP地址)。
以下代码重定向任何人使用MSIE 5-8,较旧的Android版本,symbian,黑莓和Windows XP用户(到目前为止似乎只有Firefox支持Windows上的SNI,Chrome和Opera不再支持它了)
我正在为我的所有网站使用cloudflare免费计划(通用sll),以下是他们支持的浏览器列表https://support.cloudflare.com/hc/en-us/articles/203041594-What-browsers-work-with-Cloudflare-s-SSL-certificates-
这是使用.htaccess规则重定向所有不受支持的SNI浏览器以便人们不会收到错误的最佳方法吗?到目前为止,我在windows xp上做了一些测试,它确实正确地重定向到http://版本,没有注意到任何错误,但需要确保这是正确的规则。
Options -Indexes +FollowSymLinks
RewriteEngine On
# www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS} (on|off)
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_USER_AGENT} !MSIE\ [5-8] [NC]
RewriteCond %{HTTP_USER_AGENT} !Windows\sNT\s5
RewriteCond %{HTTP_USER_AGENT} !Android.*(Mobile)?\ [0-3] [NC]
RewriteCond %{HTTP_USER_AGENT} !^(.*.symbian.*) [NC]
RewriteCond %{HTTP_USER_AGENT} !^(.*.blackberry.*) [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
此外,我将使用相对协议网址//
而不是http://
或https://,因为我将托管这两个内容。我知道这种技术现在被认为是一种仅支持ssl内容的网站的反模式,但由于我主持ssl和非ssl,我认为它更合适。