强制 https:// 和 www。使用虚拟主机 apache2

Edw*_*ard 6 server virtualhost apache2 redirect

我一直在到处寻找一种解决方案,以便能够使用虚拟主机在我的所有 URL 前强制使用 https://www。这是我目前在 000-default.conf 文件中的内容:

<VirtualHost *:80>
ServerName www.domain.com
Redirect / https://www.domain.com/
</VirtualHost >
Run Code Online (Sandbox Code Playgroud)

这意味着所有 www. 将重定向到 https://www。

现在我缺少将所有/任何其他形式的 URL 重定向到https://www 的代码。使用相同的概念(不是 RewriteEngine,因为 Apache 建议不要在简单重定向上使用 RewriteEngine)。

例如:

  • http://domain.com
  • http://www.domain.com
  • https://domain.com

他们都会去=> https://www.domain.com

如果有人能指出我正确的方向,那就太好了!

Fre*_*ers 14

这对我有用,如果你愿意,你可以在我的域上测试它。

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

<VirtualHost *:443>
    ServerName freesoftwareservers.com
    ServerAlias *.freesoftwareservers.com
Run Code Online (Sandbox Code Playgroud)

http://domain.com

http://www.domain.com

https://domain.com

我在重新实现这个时遇到了问题,发现如果我从 /sites-enabled 中删除了 000-default.conf 符号链接,它就会起作用。不知道是怎么回事,但我在 DNS 端有 0 个其他 DNS 记录,我的 Apache 完成了所有重定向,并且可以正常工作。


tho*_*ter 5

您需要三个重定向才能执行您想要的操作:

http://example.comhttps://www.example.com

http://www.example.comhttps://www.example.com

https://example.comhttps://www.example.com

前两个来自端口 80 纯 HTTP,因此您有一个 VirtualHost 用于它们。您可以通过使用 ServerAlias 部分使 VirtualHost 部分应用于多个主机名(www.example.com 和 example.com):

# Redirect http://example.com and http://www.example.com to main site
<VirtualHost *:80>
  ServerName www.example.com
  ServerAlias example.com

  Redirect / https://www.example.com/
</VirtualHost >
Run Code Online (Sandbox Code Playgroud)

然后,您只需要一个用于https://example.com的 VirtualHost 。HTTPS 使用端口 443:

# Redirect https://example.com to main site
<VirtualHost *:443>
  ServerName example.com

  Redirect / https://www.example.com/
</VirtualHost >
Run Code Online (Sandbox Code Playgroud)

注意:您还需要在那里设置 SSL 设置,使用支持带和不带“www.”域的证书。设置您的 SSL 设置不在此问题的范围内。(添加信息:如果您愿意,这些可以是两个单独的证书;现在拥有许多单独的证书变得越来越普遍,我们拥有 Let's Encrypt 和 SNI 之类的东西

如果您没有支持不带“www”的域的 SSL 证书。那么您将无法从https://example.com. 重定向只会在浏览器检查证书后发生。用户将看到不匹配的证书错误。

然后,最后,您需要“有效”站点的 VirtualHost 部分:www.example.com 上的 HTTPS(端口 443):

# Main site
<VirtualHost *:443>
  ServerName www.example.com

  # Put all your configuration for this site here

</VirtualHost >
Run Code Online (Sandbox Code Playgroud)

一旦你测试了你的重定向并且你很高兴他们正在工作,你可以通过在重定向中指定 301 状态(更改Redirect / https://www.example.com/Redirect 301 / https://www.example.com/无处不在),并通过启用强制用户浏览器记住 HTTPS 首选项的HSTS来使它们永久化。