使用mod_rewrite模仿SSL虚拟主机?

时间:2008-08-12 00:06:36

标签: apache mod-rewrite https

使用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?

3 个答案:

答案 0 :(得分:3)

配置单个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$1
</VirtualHost>

您的SSL证书必须对secure.example.com和dbadmin.example.com都有效。它可以是Terry Lorber提到的通配符证书,也可以使用subjectAltName字段添加其他主机名。

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

答案 1 :(得分:2)

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

更多here

答案 2 :(得分:0)

有apach mod_rewrite,或者您可以设置apache将https://dbadmin.example.com指向服务器上的path / to / example.com / dbadmin

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