Apache2+Certbot环境下取消单个子目录HTTP转HTTPS重定向
解决Apache2+Certbot环境下指定子目录跳过HTTPS重定向的问题
问题根源
你之前在default-ssl.conf(HTTPS虚拟主机配置)中添加规则无效,是因为HTTP请求首先由80端口的虚拟主机配置(通常是000-default.conf)处理,而Certbot默认会在这个文件中添加强制所有HTTP请求跳转HTTPS的规则,你的请求还没到HTTPS配置就已经被重定向了。
解决步骤
编辑HTTP虚拟主机配置文件
打开/etc/apache2/sites-enabled/000-default.conf,找到Certbot自动生成的HTTPS重定向规则块,添加排除/tht目录的条件:<VirtualHost *:80> ServerName yourdomain.com ServerAlias www.yourdomain.com DocumentRoot /var/www/html RewriteEngine on # 排除/tht目录的HTTP请求,不跳转HTTPS RewriteCond %{REQUEST_URI} !^/tht(/|$) [NC] # 保留Certbot的ACME验证目录,避免影响证书续期 RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/ [NC] # 原Certbot的域名匹配条件 RewriteCond %{SERVER_NAME} =yourdomain.com [OR] RewriteCond %{SERVER_NAME} =www.yourdomain.com # 跳转HTTPS规则 RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost>注意替换其中的
yourdomain.com为你的实际域名。清理冲突配置
- 删除之前在
/app目录下创建的.htaccess文件(如果有),避免和虚拟主机规则冲突; - 检查
default-ssl.conf中是否有多余的重定向规则,确保没有强制HTTP跳转的逻辑(这个文件只处理HTTPS请求)。
- 删除之前在
重启Apache服务
执行命令使配置生效:sudo systemctl restart apache2
验证结果
用curl测试:
- 访问
http://yourdomain.com/tht,应返回200状态码,无重定向; - 访问其他路径(如
http://yourdomain.com),应返回301状态码并跳转到HTTPS。
内容的提问来源于stack exchange,提问作者Saverio Tozzi
相关产品推荐
相关产品推荐

