Apache ServerName *通配符不能与vhost_dbd_module一起使用

时间:2015-03-10 21:04:44

标签: apache vhosts virtual-hosts dbd mod-vhost-alias

我正在尝试使用vhost_dbd_module将我的虚拟主机迁移到mysql数据库。

在我在网上找到的各种例子中,他们指示我在VirtualHost中使用“ServerName *”作为通配符。

当我以这种方式配置VirtualHost时,服务器只是默认返回默认的DocumentRoot。它不查询mysql数据库。

<VirtualHost *:80>
        # catch all other requests that don't get caught above
        ServerName *
        # fallbackDocumentRoot in case mysql server is down
        DocumentRoot /var/html/404

        DBDriver mysql
        DBDParams "host=<hostname> user=<user> dbname=<dbname>"
        DBDocRoot "SELECT documentRoot FROM virtualhosts WHERE serverName = %s" HOSTNAME
</VirtualHost>

但是,当我将其更改为this(将ServerName指定为domain.tld)时,它可以正常工作(在数据库中查询domain.tld并返回domain.tld的正确文档)

<VirtualHost *:80>
        # catch all other requests that don't get caught above
        ServerName domain.tld
        # fallbackDocumentRoot in case mysql server is down
        DocumentRoot /var/html/404

        DBDriver mysql
        DBDParams "host=<hostname> user=<user> dbname=<dbname>"
        DBDocRoot "SELECT documentRoot FROM virtualhosts WHERE serverName = %s" HOSTNAME
</VirtualHost>

任何错误配置的想法?

1 个答案:

答案 0 :(得分:0)

在弄乱了一些之后,似乎ServerName *仅在它是系统中的FIRST VirtualHost时才有效。

我先按顺序移动它,其下面有一些其他虚拟主机(具有更具体的ServerName example.tld),并且数据库主机和静态配置的主机都工作。