在Apache中的不同VirtualHost上显示自定义错误页面

我有一个反向代理Apache将请求移动到Tomcat servlet。 Apache中的虚拟主机上的configuration是:

<VirtualHost 10.10.10.10:80> ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1 ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1 ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2 ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1 </VirtualHost> 

基本上,如果涉及到10.10.10.10和requests /Site1/ServLet1 ,请将其路由到/Site1/ServLet1

如果我添加

 <VirtualHost 10.10.10.10:80> ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1 ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1 ErrorDocument 404 /customerrors/site1/404.html ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2 ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1 </VirtualHost> 

所以它会显示site1的自定义错误(我设置ErrorDocument),它将被提供给两个。

我怎样才能维护这种configuration每个网站有不同的404错误页面?

谢谢

编辑:

如果我根据下面的注释修改configuration,如:

 <Location /Site1/ServLet1/> ProxyPass http://1.1.1.1/Site1/ServLet1 ProxyPassReverse http://1.1.1.1/Site1/ServLet1 ErrorDocument 404 /customerrors/site1/404.html </Location> 

然后,我仍然可以到http://1.1.1.1/Site1/ServLet1但没有显示任何错误页面

我不确定你是什么意思的“不同的VirtualHosts”,因为它们是在同一个..但我认为你会想要做这样的事情(并考虑将ProxyPass语句也移动到<Location>块,如果你可以的话):

 <VirtualHost 10.10.10.10:80> ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1 ProxyPassReverse /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1 <Location /Site1> ErrorDocument 404 /customerrors/site1/404.html </Location> ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2 ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2 <Location /Site2> ErrorDocument 404 /customerrors/site2/404.html </Location> </VirtualHost> 

编辑:

要使Proxy语句驻留在位置块中:

 <VirtualHost 10.10.10.10:80> <Location /Site1> ErrorDocument 404 /customerrors/site1/404.html </Location> <Location /Site1/ServLet1> ProxyPass http://1.1.1.1/Site1/ServLet1 ProxyPassReverse http://1.1.1.1/Site1/ServLet1 </Location> <Location /Site2> ErrorDocument 404 /customerrors/site2/404.html </Location> <Location /Site2/ServLet2> ProxyPass http://2.2.2.2/Site2/ServLet2 ProxyPassReverse http://2.2.2.2/Site2/ServLet2 </Location> </VirtualHost> 

让每个虚拟主机拥有自己的VirtualHost定义。

 <VirtualHost 10.10.10.10:80> Servername site1.tld ProxyPass /Site1/ServLet1 http://1.1.1.1/Site1/ServLet1 ProxyPassReverse /Site1/ServLet1 http://1.1.1.1//Site1/ServLet1 ErrorDocument 404 /customerrors/site2/404.html </VirtualHost> <VirtualHost 10.10.10.10:80> ServerName site2.tld ProxyPass /Site2/ServLet2 http://2.2.2.2/Site2/ServLet2 ProxyPassReverse /Site2/ServLet2 http://2.2.2.2/Site1/ServLet1 ErrorDocument 404 /customerrors/site2/404.html </VirtualHost> 

你还需要确保你有一个合适的NameVirtualHost定义。