Apache - 将 HTTP://SITE 请求转发到 HTTPS://SITE

Apache - 将 HTTP://SITE 请求转发到 HTTPS://SITE

我想知道 Windows Server 2008 DNS 是否有任何方法可以将使用 HTTP 的域的请求转发到 HTTPS 上的同一域?坦率地说,我感觉这实际上是 Web 服务器的问题,但我想从 DNS 系统开始,谷歌搜索再多也没用。基本上我想允许访问子域的用户自动转发到 HTTPS 版本,因为我已禁用该站点在端口 80 上的监听(Webmail 系统与我的 Web 服务器冲突)

如果有任何不清楚的地方或者我解释得不好,请询问。

编辑:仔细想想,这显然与 DNS 无关(线索就在名称中;))有谁知道如何使用 Apache 进行配置(我想这就是答案所在)

答案1

不,DNS 只是将 URL 的主机名部分映射到 IP 地址。

URL 例如

http://www.example.com/path/whatever
https://www.example.com/path/whatever

两者都包含相同的主机名 www.example.com,这是唯一引用 DNS 的部分。您的浏览器会查看协议部分(http 或 https)来决定应使用哪种协议来联系该主机。

要强制将 HTTP 连接更改为 HTTPS 连接,您应该将 Web 服务器配置为侦听 URL 中指定的端口,如果协议是 HTTP,则使用合适的重定向响应进行回复。有很多方法可以做到这一点 - 请查看 Apache 手册或询问。

如果没有任何东西(或者更糟的是,没有专用的网络邮件服务器?)监听 URL 中指定的端口,您需要让每个人都使用新的 URL 或重新考虑解决与网络邮件冲突的解决方案。

最好将网络邮件移至另一个端口,并让 Apache 将相关 URL 重定向到网络邮件服务。

答案2

基本上,我想允许访问子域的用户自动转发到 HTTPS 版本,因为我已禁用该网站的 80 端口监听(Webmail 系统与我的 Web 服务器冲突)

听起来您有一个不同的服务守护程序在端口 80 上监听,因此您无法使用当前设置执行此操作。任何 http 请求都将直接发送到您机器上的端口 80(您已禁用该端口)。您需要重新启用 Apache 以在端口 80 上监听并在用户向您的http://主机发送请求时重写 URL。

执行此操作的标准 Apache 方式是使用mod_rewrite并执行以下操作:

<VirtualHost *:80>
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

http://httpd.apache.org/docs/current/mod/mod_rewrite.html了解更多文档。

相关内容