Apache 中,一个 VirtualHost 用于某些 URL,另一个 VirtualHost 用于所有其他 URL

Apache 中,一个 VirtualHost 用于某些 URL,另一个 VirtualHost 用于所有其他 URL

是否可以将 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 构建到您的应用程序中并让它处理它。

相关内容