Ubuntu+Apache+Let's Encrypt环境下特定目录禁用HTTPS配置问题
解决方案
核心思路
通过添加URI匹配条件,对/keuken目录及其所有子页面单独处理:跳过HTTPS强制重定向,若已处于HTTPS则转回HTTP;其余所有请求保持强制HTTPS,同时保留原有的www转非www规则。
修改后的.htaccess配置
RewriteEngine On RewriteBase / # 处理www域名跳转:非/keuken请求转HTTPS,/keuken请求转HTTP RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteCond %{REQUEST_URI} !^/keuken(/.*)?$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteCond %{REQUEST_URI} ^/keuken(/.*)?$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L] # 处理非www域名:非/keuken请求强制HTTPS RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} !^/keuken(/.*)?$ [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] # 处理非www域名:/keuken请求强制HTTP(避免HTTPS访问时的重定向循环) RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} ^/keuken(/.*)?$ [NC] RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
关键规则说明
%{REQUEST_URI} !^/keuken(/.*)?$:匹配不是以/keuken开头的请求(包括子页面如/keuken/keuken.php)%{REQUEST_URI} ^/keuken(/.*)?$:匹配是以/keuken开头的所有请求[R=301,L]:301永久重定向,L表示执行完该规则后停止后续规则解析,避免冲突
注意事项
- 清除浏览器缓存:301重定向会被浏览器永久缓存,测试前需清空缓存或使用无痕模式
- 验证mod_rewrite启用:执行
sudo a2enmod rewrite确保Apache重写模块开启,重启Apache生效 - 检查AllowOverride配置:在Apache站点配置文件(如
/etc/apache2/sites-available/domain.nl.conf)中,确保目标目录的AllowOverride All已开启,否则.htaccess规则不会生效
内容的提问来源于stack exchange,提问作者Cmeer
相关产品推荐
相关产品推荐

