运行 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>