是否可以使用一个<ProxyMatch>规则匹配多个正则expression式?

我有一个生产,testing和开发服务器的网站,我维护。 所有三台服务器都在Debian 6 GNU / Linux上运行Apache 2.2.16。 我在testing服务器上build立了一个新版本的公司网站,我的团队认为它足够稳定,可以转移到生产环境。 但是,我想尽可能无缝地进行这种转换。 我希望能够在生产服务器上转发请求,以便它们由testing服务器处理。 这样,我可以testing出这个新的实现,而不需要在生产服务器上进行任何复杂的configuration更改。

理想情况下,我可以使用Apache的mod_proxy模块来设置反向代理,以便我可以直接从testing服务器向生产客户端提供页面。 我阅读http://httpd.apache.org/docs/2.0/mod/mod_proxy.html的文档,这对我很有帮助。 我启用了mod_proxymod_proxy_http ,然后在我的开发服务器上设置了以下规则。

 <VirtualHost *:80> ServerName dev.example.com # ... other <VirtualHost>-specific settings ... ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://test.example.com/ ProxyPassReverse / http://test.example.com # ... various <Directory> directives ... </VirtualHost> 

这工作得很好。 当我访问开发服务器时,站点直接从testing服务器提供所有页面,而且看起来好像这些响应直接来自我连接的服务器。 而且,这些请求相当快速,我能够同时进行GET和POST请求,就好像我正在直接与testing服务器交谈一样。

不幸的是,这不符合我的所有需求。 由于testing服务器仅以新版本的站点运行Apache,因此我无法从testing服务器托pipeWebmail或用户。 这些请求必须由生产服务器来处理。

我希望我的生产服务器能够使用反向代理除了 /webmail和用户目录(以代字号开头的任何目录) 之外的所有页面。 理论上这可以通过<ProxyMatch>指令来实现。 但是,我没有足够的正则expression式来做到这一点。 是否有一个规则能够排除这两种types的请求被发送到代理服务器?

奖金要点:我正在寻找PCRE的一个很好的入门指南,这样我就可以写出自己的规则。 有没有人有一个正则expression式新手推荐?

在指令中不能有多个正则expression式 – 但是你可以有一个实现复杂逻辑的正则expression式:

 /http:\/\/test.example.com\/\/(?!webmail)/ 

我推荐O'Reilly的书, 掌握正则expression式,但不是介绍性文字。

有很多在线材料让你开始。 这里有一个基本的教程 。 但是我build议你也要写一本关于这个话题的好书(但是我不能从个人经历中推荐)。