HTTP 到 HTTPS 重定向(即使 IP)

HTTP 到 HTTPS 重定向(即使 IP)

我已经阅读了许多关于基本 http -> https 重定向的问题,但它们都讨论了仅包括域名的重定向/重写。

<VirtualHost *:80>
ServerName www.example.com
Redirect / https://www.example.com/

例如,上面的代码片段会将所有对 http:www.example.com 的请求重定向到 https:www.example.com,这当然是阿帕奇推荐的方式。

但是,即使请求是基于 IP 的,我们如何将 http 重定向到 https。例如,将 http:ip 重定向到 https:ip 如何实现?我知道 https 是用于域名的,但我有这个特殊要求,即客户端也能够通过 IP 访问。

答案1

使用 ip 地址的请求(或没有Host:标头的 HTTP 1.0 请求)和未知域的请求由default VirtualHost默认为第一的 VirtualHost除非明确定义以下内容:

<VirtualHost _default_:*>
    Redirect / https://www.example.com/
    ...
</VirtualHost>

因此取决于您当前的配置:

  • 你可能不需要做任何事情来处理使用 ip 地址的请求(例如,当你只有一个 VirtualHost 或 www.example.com 已经是第一个条目时)
  • 或者您可以重新排序当前的 VirtualHost 条目,以便 www.example.com 成为第一个 VirtualHost 条目
  • 明确定义_default_:80VirtualHost

答案2

只需在文件末尾写入即可http.conf

##this is for http redirection to domain name###
<VirtualHost *:80>
ServerName www.example.com
ServerAlias *
Redirect / https://www.example.com/
</VirtualHost>

##This is for https redirection to domain name###
<VirtualHost *:443>
ServerName www.example.com
ServerAlias *
Redirect / https://www.example.com/
</VirtualHost>

答案3

如果您只有一个 IP 地址,您可以使用类似下面的方法(未经测试):

<VirtualHost *:80>
ServerName www.example.com
ServerAlias *
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         https://%{HTTP_HOST}/$1 [L,R]

相关内容