我以前设置过 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 等效端口,除非存在配置不同的基于名称的匹配虚拟主机。