使用 SSL VirtualHost 设置强制使用 www 前缀

使用 SSL VirtualHost 设置强制使用 www 前缀

运行 Apache/2.4.7。

www我似乎在强制为我的某个 SSL 域添加前缀时遇到了一些麻烦。

以下模式应重定向至:https://www.foo.com

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

值得一提的是,我还想保留可能已请求的任何 URI,例如。foo.com/bar=>https://www.foo.com/bar

这是我的文件中相关的当前代码foo.com.conf

<VirtualHost *:80>
    ServerName foo.com
    ServerAlias *.foo.com
    RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</VirtualHost>

<VirtualHost *:443>
    ServerName foo.com
    ServerAlias *.foo.com
</VirtualHost>

我将非常感激您的指导。

答案1

删除ServerName端口 80 和端口 443 虚拟主机中的指令。

向端口 443 虚拟主机添加类似端口 80 虚拟主机的重定向匹配指令。

使用以下命令创建另一个端口 443 虚拟主机

ServerName www.foo.com

确保该虚拟主机在其他端口 443 虚拟主机之前出现并被处理。

此虚拟主机是用户被重定向后到达的地方。因此请在此处输入其他适当的配置。

例子:

<VirtualHost *:80>
    ServerAlias foo.com
    ServerAlias *.foo.com
    RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</VirtualHost>

<VirtualHost *:443>
    ServerName www.foo.com
    # various directives as appropriate for live service to users
    # important to place this before the wildcard VirtualHost below
    # which will match all subdomains 
    # not matched by a preceding VirtualHost
</VirtualHost>

<VirtualHost *:443>
    ServerAlias foo.com
    ServerAlias *.foo.com
    RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</VirtualHost>

答案2

Jonah 的代码片段效果很好,但我最终使用了mod_macro以避免重复代码。

<Macro ServerAliasesRedirect>
    ServerAlias foo.com
    ServerAlias *.foo.com
    RedirectMatch permanent ^/(.*) https://www.foo.com/$1
</Macro>

<Macro SSL>
    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/foo.com.crt
    SSLCertificateKeyFile /etc/apache2/ssl/foo.com.key
    SSLCertificateChainFile /etc/apache2/ssl/foo.com.ca-bundle
</Macro>

<VirtualHost *:80>
    Use ServerAliasesRedirect
</VirtualHost>

<VirtualHost *:443>
    Use SSL
    ServerName www.foo.com    
    # ...directory stuff and so on...
</VirtualHost>

<VirtualHost *:443>
    Use SSL
    Use ServerAliasesRedirect
</VirtualHost>

相关内容