2008-08-12 284 views
7

通过与Apache 2.2的SSL连接透明地重写URL的最佳方式是什么?使用mod_rewrite模拟SSL虚拟主机?

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?

回答

3

配置单个VirtualHost以同时提供secure.example.com和dbadmin.example.com(使其成为唯一*:443 VirtualHost实现此目的)。然后,您可以使用mod_rewrite调整的URI请求dbadmin.example.com:

<VirtualHost *:443> 
    ServerName secure.example.com 
    ServerAlias dbadmin.example.com 

    RewriteEngine on 
    RewriteCond %{SERVER_NAME} dbadmin.example.com 
    RewriteRule !/dbadmin(.*)$ /dbadmin$1 
</VirtualHost> 

你的SSL证书需要两个secure.example.com和dbadmin.example.com有效。它可以是Terry Lorber提到的通配符证书,也可以使用subjectAltName字段添加其他主机名。

如果遇到问题,请先将其设置为<VirtualHost *>,并检查它是否在没有SSL的情况下正常工作。 SSL连接和证书是一个单独的复杂层,您可以在URI重写工作后设置它。

0

有阿帕奇mod_rewrite的,或者你可以配置Apache直接https://dbadmin.example.com到路径/到/ example.com/dbadmin服务器

<VirtualHost *> 
ServerName subdomain.domain.com 
DocumentRoot /home/httpd/htdocs/subdomain/ 
</VirtualHost> 
2

上除非你的SSL证书是“通配符”或多站点善良,那么我认为这不会起作用。重写将显示在浏览器中,并且地址栏中的名称必须对证书有效,否则用户将看到安全错误(他们总是可以接受并继续,但听起来不像您想要的那样)。

更多here