Apache中豁免特定目录不强制HTTPS跳转,需在RewriteCond中用!^/path(/|$)排除路径,如!^/public(/|$),配合RewriteRule实现条件重定向,仅对非豁免路径执行HTTP→HTTPS 301跳转。
apache 中 https 部署时,若想让**某个特定目录(如 /public、/assets 或 /tz.php)不强制跳转 https,保持 http 可访问**,关键不是“禁用 https”,而是**在重定向规则中排除该路径**。https 本身仍可访问,只是不强制跳转——这样既能保障登录页等敏感路径走 https,又能让静态资源或调试接口灵活使用 http。
核心思路:在 Rewrite 规则里加条件排除路径
Apache 的 HTTP → HTTPS 跳转通常靠 .htaccess 或主配置中的 RewriteCond 实现。要豁免某目录,只需在判断跳转前,用 RewriteCond 检查请求 URI 是否匹配该路径,并用 ! 取反。
-
匹配单个文件:例如豁免
/tz.php,添加条件RewriteCond %{REQUEST_URI} !^/tz\.php$ -
匹配整个目录:例如豁免
/public/下所有内容,用RewriteCond %{REQUEST_URI} !^/public(/|$) -
多个豁免项:可叠加多行
RewriteCond,每行一个排除条件
具体配置示例(.htaccess 方式)
将以下内容放入网站根目录的 .htaccess 文件中:
RewriteEngine On
# 如果端口不是443(即非HTTPS),且请求路径不是 /tz.php 也不是 /public/ 开头,则跳转
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/tz\.php$
RewriteCond %{REQUEST_URI} !^/public(/|$)
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
说明:
• !^/tz\.php$ 精确排除 /tz.php(注意点号需转义)
• !^/public(/|$) 排除 /public 及其子路径(如 /public/css/style.css)
• [R=301,L] 表示永久重定向,L 表示此为最后一条规则
如果用主配置(httpd.conf 或虚拟主机段)
不推荐在 .htaccess 外再写全局跳转规则,但若必须,可在 <directory></directory> 或 <virtualhost></virtualhost> 中配置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<virtualhost>
ServerName example.com
DocumentRoot "/var/www/html"
<pre class="brush:php;toolbar:false;">RewriteEngine On
RewriteCond %{REQUEST_URI} !^/assets/
RewriteCond %{REQUEST_URI} !^/health\.html$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [R=301,L]
注意:
• 必须确保 mod_rewrite 已启用(LoadModule rewrite_module modules/mod_rewrite.so)
• 若在 <directory></directory> 中使用,AllowOverride All 需开启
• 豁免路径建议用绝对 URI 起始符 ^/,避免误匹配
补充提醒:HTTPS 本身仍可用,只是不强制
这种配置只影响“HTTP 请求是否自动跳转”,并不禁止用户手动输入 https://example.com/public/img.png。如果你需要彻底阻止某目录响应 HTTPS 请求(极少场景),需在 <virtualhost></virtualhost> 中用 <location></location> 配合 Require not ip 或返回 403,但通常没必要——豁免跳转已满足绝大多数需求。










