我不确定这个问题措辞是否恰当。
基本上,我已经通过http://httpd.apache.org/docs/2.2/vhosts/mass.htmlbuild立起来,这样我只需要在我的〜/ Sites文件夹中创build一个文件夹(比如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%的站点在大规模虚拟主机方式下工作良好,我只是偶尔想要重写这个行为。
VirtualDocumentRoot的文档说使用none来closures它,所以我假设你需要做的是将它添加到你的<VirtualHost>部分:
<VirtualHost *:80> DocumentRoot /Users/cameron/Sites/laravel.test/public VirtualDocumentRoot none ServerName laravel.test </VirtualHost>
但这还不够:使用NameVirtualHost ,如果传入的请求与任何<VirtualHost>块的ServerName / ServerAlias不匹配,则使用第一个<VirtualHost>块,而不pipe其名称是什么。 在这种情况下,它也会导致所有其他主机名称都与此VirtualHost指令相同。
解决这个问题的一个可能的方法是将VirtualDocumentRoot指令移动到位于任何其他站点之前的configuration中的<VirtualHost>块。 这个块的ServerName应该不重要,像这样:
<VirtualHost *:80> ServerName bogusname UseCanonicalName Off VirtualDocumentRoot /Users/cameron/Sites/%0 </VirtualHost>
虚假名称应该确保这个VirtualHost只能用在没有其他虚拟主机匹配请求的“默认”情况下。