无需 DNS 或静态 IP 将 HTTP 重定向到 HTTPS

无需 DNS 或静态 IP 将 HTTP 重定向到 HTTPS

我以前设置过 Web 服务器,但现在我正在做一个有点不同的嵌入式 Linux 项目。我需要嵌入式 Linux 设备

  • 运行 Apache 服务器
  • 支持DHCP
  • 不需要任何 DNS 设置
  • (基本上需要即插即用并且防呆)。

我不太确定如何进行 HTTP 到 HTTPS 重定向。困难之处在于我不知道 DNS 或 IP。有没有办法让 mod-rewrite 动态检测当前 IP 并重定向到 HTTP,如下所示:

RewriteRule ^(.*)$ https://[(currentDHCPIPAddress)/$1 [L,R=301]

大多数流量都来自内部局域网,所以我无法做某种防火墙魔法。

如果其他人有任何想法来实现这一点,我很乐意听取建议。这与您想要设置大多数服务器的方式有点不同,所以目前它让我很困惑,而且大多数文档都没有为您准备这种用例。

答案1

这是一个简单重定向,所以我们首先避免使用 mod_rewrite并使用mod_aliasRedirect, 反而。

如果 指令在 或 部分Redirect中使用,  并且 <Location><LocationMatch>URL 路径 省略,则 URL 参数将被解释为 表达式语法

随着表达式语法您可以使用变量,并%{HTTP_HOST}包含标头中的所有内容Host:,即浏览器地址栏上的主机名,无论是 DNS 名称还是 IP 地址。这正是您要找的。

让我们把它们放在一起。您的默认设置(第一个或唯一一个)基于名称的虚拟主机可以有:

NameVirtualHost *:80
<VirtualHost *:80> 
    <Location "/">
        Redirect "https://%{HTTP_HOST}%{REQUEST_URI}"
    </Location>
</VirtualHost>

这将使端口 80 上的任何 HTTP 请求重定向到其 HTTPS 等效端口,除非存在配置不同的基于名称的匹配虚拟主机。

相关内容