是否可以将 Apache 配置为让不同的虚拟主机监听相同的 IP 地址和相同的端口,以便某些路径(不是完整域,只是本地路径)将指向一个虚拟主机,而其他路径将默认指向另一个虚拟主机?
例如:
#All requests to www.mysite.com/special-url go here
<VirtualHost /special-url:80>
DefaultType application/x-httpd-php
ServerName server1
Document Root "/home/me/server1"
<Directory "/home/me/server1">
AllowOverride None
Order allow, deny
allow from all
</Directory>
</VirtualHost>
#All other requests go here
<VirtualHost *:80>
DefaultType application/x-httpd-php
ServerName server1
Document Root "/home/me/server2"
<Directory "/home/me/server2">
AllowOverride None
Order allow, deny
allow from all
</Directory>
</VirtualHost>
此服务器配置不起作用,向第一个VirtualHost
标记添加通配符组合(例如VirtualHost */special-url:80
)也不起作用。相反,当我运行此命令时,Apache 将请求定向到/special-url
。/home/me/server1
但如果我查找,/foo
它仍会在中查找server1
并返回,404
即使有一个名为的foo
目录/home/me/server2
。
有没有办法为特定的 URL 设置一个 VirtualHost,为所有其他 URL 设置另一个 VirtualHost?
答案1
事实并非如此。虚拟主机基于 IP 地址或主机名,而不是路径。但您可以采取其他一些措施来实现相同的目标:
- 如果
server1
虚拟主机有单独的主机名,则可以进行重定向 - 如果您想要的只是为该 URL 提供来自不同路径的内容,则可以使用
AliasMatch
映射该路径 - 您可以
mod_rewrite
根据您的规范进行 URL 重写
我无法更具体说明你到底想实现什么。但我相信有关将 URL 映射到文件系统的 Apache 文档将为您提供一个良好的起点。
答案2
听起来这可能是 Apache 代理模块的工作。
查看 ProxyPass 指令:
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass
答案3
虚拟主机用于处理请求的域部分,以便您可以在同一台服务器上托管多个域。
您可以使用别名或重写来做一些事情。或者您可以将不同的 URL 构建到您的应用程序中并让它处理它。