虚拟主机优先级

虚拟主机优先级

我已经设置了 Apache 服务器,并将子域名链接到一个应用程序,该应用程序将找到合适的数据库进行操作,如果数据库不存在,则退出

因此我有一个 *.domain.tld

但现在我确实需要一些用于服务器应用程序的子域名,例如 phpmyadmin.domain.tld

所以我这样设置

<VirtualHost *>
DocumentRoot "/var/www/phpmyadmin"
ServerName phpmyadmin.domain.tld
<Directory "/var/www/phpmyadmin">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

<VirtualHost *>
DocumentRoot /var/www/hidden/app/public
ServerName *.domain.tld
<Directory "/var/www/hidden/app/public">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

但是这样,无论我提供 test.domain.tld、phpmyadmin.domain.tld、helpme.domain.tld 等等,它总是转到 phpmyadmin。

如果我放置第二个虚拟主机(* .domain.tld),它不会转到 phpmyadmin.domain.tld,而只会转到应用程序

我究竟做错了什么?

更新:

还是行不通

这样,无论我去 test.domain.tld phpmyadmin.domain.tld 等等,它都只显示 phpmyadmin。

<VirtualHost *>
DocumentRoot /var/www/phpmyadmin
<Directory "/var/www/phpmyadmin">
allow from all
Options +Indexes
</Directory>
ServerName phpmyadmin.domain.tld
ServerAlias phpmyadmin.domain.tld
</VirtualHost>

<VirtualHost *>
DocumentRoot /var/www/hidden/app/public
ServerName domain.tld
ServerAlias *.domain.tld
<Directory "/var/www/hidden/app/public">
Allowoverride All
allow from all
Options +Indexes
</Directory>
</VirtualHost>

这样,无论我进入 test.domain.tld phpmyadmin.domain.tld 等,它都只会显示应用程序

<VirtualHost *>
DocumentRoot /var/www/hidden/app/public
ServerName domain.tld
ServerAlias *.domain.tld
<Directory "/var/www/hidden/app/public">
Allowoverride All
allow from all
Options +Indexes
</Directory>
</VirtualHost>

<VirtualHost *>
DocumentRoot /var/www/phpmyadmin
<Directory "/var/www/phpmyadmin">
allow from all
Options +Indexes
</Directory>
ServerName phpmyadmin.domain.tld
ServerAlias phpmyadmin.domain.tld
</VirtualHost>

apachectl -S 输出

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:*                    phpmyadmin.domain.tld (/etc/httpd/conf/httpd.conf:1015)
*:*                    domain.tld (/etc/httpd/conf/httpd.conf:1025)
Syntax OK

答案1

添加NameVirtualHost *到您的配置。

(如果这不起作用,请提供来自的输出apachectl -S。)

答案2

ServerName指令不允许使用通配符。为此,您需要ServerAlias

所以让它像

ServerName somethingelse.domain.tld
ServerAlias *.domain.tld

相关内容