基于子文件夹的基于名称的虚拟主机

时间:2018-08-14 20:56:27

标签: apache apache2 virtualhost

我正在尝试为Apache配置三个不同的VirtualHost,以便在有人请求相应的子域(例如,foo.example.com)或相应的子文件夹(例如,example.com/foo)时使用特定的VirtualHost。

我认为以下httpd.conf可以解决问题,但是ServerAlias指令只是被忽略了:

<VirtualHost *:80 *:443>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /srv/http
</VirtualHost>
<VirtualHost *:80 *:443>
    ServerName foo.example.com
    ServerAlias example.com/foo
    DocumentRoot /usr/share/web
</VirtualHost>
<VirtualHost *:80 *:443>
    ServerName bar.example.com
    ServerAlias example.com/bar
    DocumentRoot /var/www/html
</VirtualHost>

当请求bar.example.com时,将按预期使用第三个VirtualHost。但是,在example.com/bar的情况下,尽管ServerAlias,第一个VirtualHost仍然优先。同样,请求example.com/foo匹配第一个VirtualHost,而不是第二个。

如何修复此配置以产生所需的行为?

1 个答案:

答案 0 :(得分:0)

ServerAlias采用主机名,而不是主机名和路径。该机制无法完成您想要的操作。只需在要访问的虚拟主机中创建别名或重定向。