在 apache 中实现 http 强制跳转 https,最标准且高效的做法是配置虚拟主机监听 80 端口,并使用 rewriteengine 配合 rewritecond 和 rewriterule 指令将请求重定向到 443 端口。具体操作是在 <virtualhost></virtualhost> 容器中启用重写引擎,判断 %{https} 变量是否为 off,然后将所有请求通过 r 标志返回 301 永久重定向状态码至对应的 https:// url。

RewriteCond 如何判断当前连接是否加密
要准确识别非加密连接,需要检查环境变量 %{HTTPS}。当客户端通过 HTTP 访问时,该变量的值为 off;若已通过 HTTPS 访问,则值为 on。因此,配置 RewriteCond %{HTTPS} off 即可精准匹配未加密的请求,避免对已经处于安全通道中的请求进行无效的重写或循环跳转。

ServerName example.com
DocumentRoot /var/www/html
<VirtualHost *:80>
ServerName example.com
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/key.pem
</VirtualHost>
上述配置包含两个虚拟主机块。第一个块监听 80 端口,开启 RewriteEngine,当检测到 %{HTTPS} 为 off 时,将所有路径匹配项重定向至 https:// 开头的相同主机和 URI,并标记为 L(最后一条规则)和 R=301(永久重定向)。第二个块监听 443 端口,配置 SSL 证书路径以提供加密服务。预期结果是:访问 http://example.com/page 时,浏览器收到 301 响应,自动跳转到 https://example.com/page。
通过Apache Tika Server REST API从1400多种文件格式中提取文本和元数据。处理PDF、DOCX、PPTX、电子邮件归档以及带有MIME类型检测的嵌入式文档提取。
RewriteRule 的正则表达式与占位符含义
在重写规则中,^(.*)$ 用于捕获请求的完整 URI 路径,确保跳转后保留原有的查询参数和子路径。右侧的目标地址使用 %{HTTP_HOST} 和 %{REQUEST_URI} 动态获取当前请求的主机名和 URI,从而支持多域名或带参数的 URL 正确跳转。这种写法避免了硬编码域名,提高了配置的通用性。

# 测试不同输入的重定向行为 # 输入: http://example.com/search?q=test # 期望输出: 301 Moved Permanently, Location: https://example.com/search?q=test # 输入: http://example.com/ # 期望输出: 301 Moved Permanently, Location: https://example.com/ # 输入: https://example.com/secure # 期望输出: 无重定向,直接由 443 虚拟主机处理
通过对比不同输入,可以验证规则的正确性。对于 HTTP 请求,无论路径是否包含查询字符串,都会触发重定向并保留原始结构。对于 HTTPS 请求,由于不满足 RewriteCond 条件,规则不会执行,请求直接进入 443 端口的虚拟主机处理,确保加密流量不被干扰。这种机制保证了安全性和用户体验的一致性。
基于 R 标志的响应状态码选择
在 RewriteRule 中使用 R=301 或 R=302 会影响浏览器的缓存行为和 SEO 效果。R=301 表示永久重定向,浏览器会缓存该跳转,后续直接访问 HTTPS,适合生产环境。而 R=302 表示临时重定向,浏览器不会缓存,每次请求都需重新判断,适合调试或临时维护场景。选择 R=301 能减少服务器负载并提升用户访问速度。

















