我已经阅读了许多关于基本 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_:80
VirtualHost
答案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]