如何通过.htaccess实现站点部分页面强制跳转HTTPS且排除admin目录?
配置方法
- 确认Apache已启用
mod_rewrite模块 - 确认站点配置中对应目录的
AllowOverride参数设置为All,保证.htaccess文件可生效
完整.htaccess规则
RewriteEngine On # 全局HTTP转HTTPS,排除admin目录 RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} !^/admin(/.*)?$ [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
规则解释
RewriteEngine On:开启重写引擎,是所有重定向规则生效的前提RewriteCond %{HTTPS} off:匹配所有非HTTPS的访问请求RewriteCond %{REQUEST_URI} !^/admin(/.*)?$ [NC]:排除所有路径以/admin开头的请求,[NC]标识匹配时不区分大小写,(/.*)?同时兼容/admin、/admin/、/admin/xxx.php等所有admin目录下的路径RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]:符合上述两个条件的请求,301永久重定向到对应HTTPS地址,[L]标识当前规则是匹配到的最后一条,不再执行后续同层级规则
额外注意事项
如果/admin目录下存在独立的.htaccess文件,可在该文件中添加以下规则,避免用户手动输入HTTPS地址访问admin目录时触发异常:
RewriteEngine On # admin目录强制走HTTP RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} ^/admin(/.*)?$ [NC] RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
配置完成后建议清空浏览器缓存再测试,避免301永久重定向的本地缓存影响验证结果。
内容的提问来源于stack exchange,提问作者noobcoder
相关产品推荐
相关产品推荐

