Apache & HTTPS:多域名网站的.htaccess 301重定向方案咨询
多域名HTTP强制跳转HTTPS的.htaccess解决方案
没问题,这个需求在多域名共享根目录的场景下太常见了,我来给你写一套靠谱的规则,完美适配你的情况。
首先,你之前用的单域名规则之所以不适用,是因为硬编码了domain1.xyz,跳转后所有请求都会跑到这个域名下,这显然不是你想要的。我们需要动态保留当前请求的域名,用Apache的内置变量%{HTTP_HOST}就能搞定。
核心重定向规则
直接把下面的代码放到根目录的.htaccess文件里就行:
RewriteEngine On # 强制所有HTTP请求跳转到HTTPS,保留原域名和路径 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
规则解释
RewriteEngine On:开启URL重写功能,这是所有重写规则的前提。RewriteCond %{HTTPS} off:判断当前请求是否是HTTP协议(off代表未启用HTTPS),比判断端口80更通用,毕竟有些服务器的HTTP端口不一定是80。RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]:把所有HTTP请求重定向到HTTPS版本,%{HTTP_HOST}会自动获取当前访问的域名(不管是domain1还是domain2),$1保留原请求的路径,R=301是永久重定向(对SEO友好),L代表这是最后一条规则,匹配后不再往下执行。
额外补充:适配不同主页需求
既然你两个域名对应不同的主页(index1.php和index2.php),可以在上面的规则后面再加一段,实现访问域名根目录时自动对应到各自的主页:
# 针对domain1.xyz,默认主页指向index1.php RewriteCond %{HTTP_HOST} ^domain1\.xyz$ [NC] RewriteRule ^$ /index1.php [L] # 针对domain2.xyz,默认主页指向index2.php RewriteCond %{HTTP_HOST} ^domain2\.xyz$ [NC] RewriteRule ^$ /index2.php [L]
这里的[NC]代表不区分大小写,避免因为域名大小写问题导致匹配失败。
这样配置后,不管用户用哪个域名的HTTP访问,都会自动跳转到对应的HTTPS地址,而且根目录访问会正确指向各自的主页,完全满足你的需求~
内容的提问来源于stack exchange,提问作者Sydowh
相关产品推荐
相关产品推荐

