【发布时间】:2016-09-11 04:08:47
【问题描述】:
目前,我在我的 Apache 2.4 服务器(运行 EasyPHP)上设置了以下 VirtualHost 配置:
## Local domain access
<VirtualHost 127.0.0.1>
UseCanonicalName Off
ServerAlias *.local *.*.local
VirtualDocumentRoot "D:/var/www/%-2/public_html"
<Directory "D:/var/www/*/public_html">
Require all granted
Options Includes Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
本质上,这会将{domain}.local 和{sub}.{domain}.local 映射到{domain}s 文档根目录——这样做的原因是因为我主要使用Laravel 进行开发,并充分利用了subdomain routing。
但是,在某些情况下,我需要让子域请求指向域的文档根父级中的另一个目录,从而调用具有自己文档根的不同应用程序。
通过上述 VirtualHost 配置,请求 test.example.local 将在 D:\var\www\example\public_html 处提供文档根目录。
我可以对此配置进行哪些添加或更改,以允许上述示例改为提供D:\var\www\example\test\public_html,但前提是test 目录存在?
【问题讨论】:
-
您为此定义了单独的虚拟主机。这允许使用文字路径规范。但是请注意,使用单独的主机名(有时称为“子域”)可能会导致浏览器在使用 https 时应用的安全预防措施出现问题(当然应该这样做)。
-
是的,我想可能是这样。那么问题就变成了一个关于冲突的问题——Apache 将如何确定使用哪个虚拟主机?我先定义哪个?
-
或者你是说我需要为每个人专门定义一个主机?
-
如文档所述,第一个定义的虚拟主机用作后备。除此之外,顺序并不重要。匹配的主机由 http 请求中的
HOST标头选择。这就是基于名称的虚拟主机的工作方式。注意:“基于名称的虚拟主机”,而不是基于地址的虚拟主机:httpd.apache.org/docs/current/vhosts/examples.html -
是的,您为每个主机名定义了一个单独的虚拟主机。您可以为那些与所有定义相同的定义包含一个共享配置文件。但是主机定义本身应该是分开的。
标签: apache subdomain virtualhost document-root