所以我有 2 个配置文件。
我的站点配置文件
<VirtualHost *:80>
ServerName www.mysite.com
ServerAlias mysite.com *.mysite.com
DocumentRoot /var/www/mysite/www
ErrorDocument 404 /redirect.php
ErrorLog logs/application/mysite.error_log
CustomLog logs/application/mysite.access_log Combined
</VirtualHost>
视频上传配置文件
<VirtualHost *:80>
ServerName upload.mysite.com
DocumentRoot /var/www/videouploader/www
ErrorLog logs/application/videoupload.error_log
CustomLog logs/application/videoupload.access_log Combined
</VirtualHost>
你看,我们有大约 50 个可能的 something.mysite.com 子域名,它们都执行不同的操作,但它们都由同一个文档根目录提供服务。
我希望将 *.mysite.com 保留在那里,只是因为它比世界上最长的服务器别名行更干净,而且它可以防止那些试图使用 bananananan.mysite.com 或某些不起作用的东西的白痴。
我已阅读完 Apache 文档,但其中确实没有关于此场景的任何内容。有人知道该怎么做吗?
答案1
Apache 从上到下搜索 vhost 匹配项,并对遇到的第一个匹配项采取行动。如果您将其重命名 videoupload.conf
为, 0videoupload.conf
它将被读取mysite.conf
,并且它应该可以正常工作。
答案2
我遇到了类似的问题。解决方案是从任何其他指令的标头中删除域名<VirtualHost>
。删除:
<VirtualHost test.blah.org:443>
ServerName test.blah.org
用。。。来代替:
<VirtualHost *:443>
ServerName test.blah.org
在标头中使用域名会导致 apache 在指令ServerAlias static-*.blah.org
下优先匹配该虚拟主机而不是我的虚拟主机<VirtualHost *:443>
。
答案3
可以在路径的文件名或目录部分使用 Shell 样式 (fnmatch()) 通配符,以按字母顺序一次包含多个文件。