如何启用SSL并排除特定目录、子域名,同时规范化域名至www
解决方案:域名规范化+SSL例外配置
我来帮你整理出正确的.htaccess配置,完美实现你要的域名规范化(domain.com→www.domain.com)+ SSL启用但排除指定目录/页面的需求:
RewriteEngine On # 1. 统一域名:将所有非www请求跳转到www版本(保留当前协议) RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteCond %{HTTPS}s ^on(s)|off RewriteRule ^ https%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # 2. 强制HTTPS:除了/PHP/目录和noSSL.htm,其他所有路径都跳转到HTTPS RewriteCond %{SERVER_PORT} !=443 RewriteCond %{REQUEST_URI} !^/PHP/ [NC] RewriteCond %{REQUEST_URI} !^/noSSL\.htm$ [NC] RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # 3. 例外路径处理:如果通过HTTPS访问/PHP/或noSSL.htm,跳回HTTP RewriteCond %{SERVER_PORT} =443 RewriteCond %{REQUEST_URI} ^/PHP/ [NC,OR] RewriteCond %{REQUEST_URI} ^/noSSL\.htm$ [NC] RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
配置说明
- 域名统一规则:不管用户用
http://domain.com还是https://domain.com访问,都会先跳转到对应的www版本,确保所有流量都集中在www.domain.com这个主域名上。 - SSL强制规则:只有当请求是HTTP,且路径不在
/PHP/目录下、也不是noSSL.htm时,才会强制跳转到HTTPS,保证大部分页面都使用加密连接。 - 例外回退规则:如果用户不小心通过HTTPS访问了
/PHP/或noSSL.htm,会自动跳回HTTP,严格遵循你“不对这些路径启用SSL”的要求。
注意事项
- 测试阶段可以把
R=301改成R=302(临时重定向),确认配置没问题后再改回301(永久重定向,对SEO更友好)。 - 确保你的服务器已经配置好
www.domain.com的有效SSL证书,否则HTTPS跳转会触发浏览器安全警告。 - 规则顺序不能乱:必须先统一域名,再处理SSL相关的跳转,避免出现循环跳转或错误的地址指向。
[NC]标志让规则不区分大小写,所以/php/和/PHP/、nossl.htm和noSSL.htm都会被正确匹配,适配不同的访问习惯。
内容的提问来源于stack exchange,提问作者Kevin Kraden
相关产品推荐
相关产品推荐

