![使用通配符为域和文档根目录设置 vhost 别名 - 文档根目录解析不正确](https://linux22.com/image/799283/%E4%BD%BF%E7%94%A8%E9%80%9A%E9%85%8D%E7%AC%A6%E4%B8%BA%E5%9F%9F%E5%92%8C%E6%96%87%E6%A1%A3%E6%A0%B9%E7%9B%AE%E5%BD%95%E8%AE%BE%E7%BD%AE%20vhost%20%E5%88%AB%E5%90%8D%20-%20%E6%96%87%E6%A1%A3%E6%A0%B9%E7%9B%AE%E5%BD%95%E8%A7%A3%E6%9E%90%E4%B8%8D%E6%AD%A3%E7%A1%AE.png)
我对这个问题中应该使用的正确术语只有一个模糊的概念,所以请随时帮助我澄清一下。
我有一个 vhost 设置。我的想法是使用通配符将所有请求路由root.TERM.lh
到/TERM/
文档根目录。
下面的设置可以很好地识别域并相应地路由它们,但它不会将文档根目录中的 %1 转换为 TERM。例如,Apache 错误日志告诉我,对于对 root.mywebsite.lh 的请求,它试图路由到/Users/hollsk/Dev/websites/%1
,因此它将其解释为文字字符串。
我的语法不正确,或者我缺少一些模块?
NameVirtualHost *
<VirtualHost *>
ServerName root.%1.lh
ServerAlias root.%1.lh
DocumentRoot /Users/hollsk/Dev/websites/%1/
</VirtualHost>
答案1
这种配置风格需要使用附加模块,而不是核心虚拟主机指令。
请参阅此处的 VirtualDocumentRoot:http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html
答案2
我的语法有一点不正确。
NameVirtualHost *
<VirtualHost *>
ServerName root.%2.lh
ServerAlias root.%2.lh
DocumentRoot /Users/hollsk/Dev/websites/%2/
</VirtualHost>
注意%2
,而不是%1
- 仍然不确定为什么%1
被按字面意思解释(而不是字符串root
,这是我所期望的),但无论如何,更改为正确的句柄可以解决问题。