使用mod_rewrite模拟SSL虚拟主机?
用Apache 2.2通过SSL连接透明地重写URL的最佳方法是什么?
Apache 2本机不支持多个基于名称的虚拟主机进行SSL连接,而且我听说mod_rewrite可以提供帮助。我想做这样的事情:
我已经设置了服务器,以便可以通过以下方式访问站点
https://secure.example.com/dbadmin
但我想将其作为https://dbadmin.example.com
我如何进行设置,以使"重写"规则将dbadmin.example.com重写为secure.example.com/dbadmin,但不在客户端的地址栏上显示重写(即,客户端仍只会看到dbadmin.example.com) ),遍布https?
解决方案
回答
有apache mod_rewrite,或者我们可以设置apache将https://dbadmin.example.com定向到服务器上的path / to / example.com / dbadmin
<VirtualHost *> ServerName subdomain.domain.com DocumentRoot /home/httpd/htdocs/subdomain/ </VirtualHost>
回答
除非SSL证书是"通配符"或者多站点证书,否则我认为这不会起作用。重写将显示在浏览器中,并且地址栏中的名称必须针对证书有效,否则用户将看到一个安全错误(他们可以始终接受并继续,但是听起来不像我们想要的那样) )。
这里更多。
回答
配置单个VirtualHost来同时服务secure.example.com和dbadmin.example.com(使其成为唯一实现此目的的*:443 VirtualHost)。然后,我们可以使用mod_rewrite调整对dbadmin.example.com的请求的URI:
<VirtualHost *:443> ServerName secure.example.com ServerAlias dbadmin.example.com RewriteEngine on RewriteCond %{SERVER_NAME} dbadmin.example.com RewriteRule !/dbadmin(.*)$ /dbadmin </VirtualHost>
SSL证书必须同时对secure.example.com和dbadmin.example.com有效。如Terry Lorber所述,它可以是通配符证书,也可以使用subjectAltName字段添加其他主机名。
如果遇到问题,请先在<VirtualHost *>上进行设置,然后检查它是否在没有SSL的情况下工作。 SSL连接和证书是一个单独的复杂性层,我们可以在URI重写工作之后进行设置。