You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache2+Certbot环境下取消单个子目录HTTP转HTTPS重定向

解决Apache2+Certbot环境下指定子目录跳过HTTPS重定向的问题

问题根源

你之前在default-ssl.conf(HTTPS虚拟主机配置)中添加规则无效,是因为HTTP请求首先由80端口的虚拟主机配置(通常是000-default.conf)处理,而Certbot默认会在这个文件中添加强制所有HTTP请求跳转HTTPS的规则,你的请求还没到HTTPS配置就已经被重定向了。

解决步骤

  1. 编辑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为你的实际域名。

  2. 清理冲突配置

    • 删除之前在/app目录下创建的.htaccess文件(如果有),避免和虚拟主机规则冲突;
    • 检查default-ssl.conf中是否有多余的重定向规则,确保没有强制HTTP跳转的逻辑(这个文件只处理HTTPS请求)。
  3. 重启Apache服务
    执行命令使配置生效:

    sudo systemctl restart apache2
    

验证结果

用curl测试:

  • 访问http://yourdomain.com/tht,应返回200状态码,无重定向;
  • 访问其他路径(如http://yourdomain.com),应返回301状态码并跳转到HTTPS。

内容的提问来源于stack exchange,提问作者Saverio Tozzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:15:00