我不确定这个问题的表述是否正确。
基本上,我通过以下方式设置http://httpd.apache.org/docs/2.2/vhosts/mass.html这样我只需要在 ~/Sites 文件夹中创建一个文件夹(例如 example.test),然后就可以转到http://example.test(假设我的主机文件匹配)。
我正在开展几个项目,这些项目在公共目录的上一级安装了框架,所以我想知道是否可以用单个虚拟主机覆盖大规模虚拟主机。
我尝试了以下操作:
# I want this...
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /Users/cameron/Sites/laravel.test/public
ServerName laravel.test
</VirtualHost>
# ...to override this only for laravel.test
UseCanonicalName Off
VirtualDocumentRoot /Users/cameron/Sites/%0
Laravel PHP 框架将框架安装在公共级别之上,就像我说的,所以当我去http://laravel.test,我希望它去/Users/cameron/Sites/laravel.test/public
而不是/Users/cameron/Sites/laravel.test/
如果这有意义的话......
但上面的代码不起作用。它基本上忽略了最后两行之前的所有内容。
所以我的问题是... 有没有办法实现我想要的?不一定是我尝试的方法,但我有大量的本地网站,其中 99% 在大规模虚拟主机方法下运行良好,我只是偶尔想覆盖该行为。
答案1
文档VirtualDocumentRoot
说用来none
将其关闭,所以我假设您需要做的就是将其添加到您的<VirtualHost>
部分:
<VirtualHost *:80>
DocumentRoot /Users/cameron/Sites/laravel.test/public
VirtualDocumentRoot none
ServerName laravel.test
</VirtualHost>
但这还不够:使用 时,如果传入请求与任何块的/NameVirtualHost
都不匹配,则使用第一个块,无论其名称是什么。在这种情况下,它会导致所有其他主机名也使用此 VirtualHost 指令。ServerName
ServerAlias
<VirtualHost>
<VirtualHost>
解决此问题的可能方法是将 VirtualDocumentRoot 指令移到<VirtualHost>
配置中位于其他任何站点之前的块中。ServerName
此块的 应该无关紧要,例如:
<VirtualHost *:80>
ServerName bogusname
UseCanonicalName Off
VirtualDocumentRoot /Users/cameron/Sites/%0
</VirtualHost>
虚假名称应确保此 VirtualHost 仅在没有其他 VirtualHosts 与请求匹配的“默认”情况下使用。