ActiveSync的Apache2 RewriteRule语法在反向代理中redirect

好吧,我认为这是一个相当简单的任务,但是我可以可靠地进行testing,并且弄清楚我做错了什么。 我试图按照Apache的mod_rewrite文档,但它似乎没有按我期望的方式工作。

我有一个Apache服务器作为反向代理运行在公用OWA访问的Exchange CAS之前,我们希望拦截ActiveSyncstream量(简单模式匹配)并将其redirect到AirWatch安全电子邮件网关(SEG)URL。 所有其他(即Web浏览器OWA)stream量应该照常发送到CAS。

所以我们开始的是这样的,这完全适用于OWA访问,但不执行ActiveSync到SEGredirect:

<VirtualHost *:443> ServerName webmail.company.com:443 RewriteEngine on RewriteRule ^/$ https://webmail.company.com/exchange [R,L] <Location /> Order allow,deny Allow from all # This is the CAS's internal IP ProxyPass https://10.100.10.209/ ProxyPassReverse https://10.100.10.209/ </Location> </VirtualHost> 

所以我添加了这一行(中间的一个),试图重写以“/ Microsoft-Server-Activesync / [whatever]开头的URL到https://seg.company.com/Microsoft-Server-Activesync / [whatever] “:

 <VirtualHost *:443> ... RewriteEngine on RewriteRule ^/Microsoft-Server-Activesync?(.+)$ https://seg.company.com/Microsoft-Server-Activesync?$1 [R] RewriteRule ^/$ https://webmail.company.com/exchange [R,L] ... </VirtualHost> 

当我做这个改变(当然在testing中),我从移动设备发送给它的stream量似乎没有被redirect。 相反,ActiveSyncstream量就像平常一样stream向Exchange CAS,就像规则没有被触发一样。

所以,有两个问题:

  1. 我正在做一些明显的错误与我添加的RewriteRule ?,和
  2. 我怎样才能更聪明地解决这个问题比“在浏览器中点击ActiveSync URL,检查Web服务器日志以找出它去哪里”?

提前致谢!

问候,乔恩heese

嘿,那个configuration看起来很熟悉的原因。 嘿乔恩! 希望我没有留下太多的垃圾给你清理。

我认为你是那里的大部分。 一个小的区分大小写的问题,手机应该发送/Microsoft-Server-ActiveSync而不是/Microsoft-Server-Activesync ,这样就会错过匹配。 另外,不确定请求是否总会有跟随的path,所以如果捕获只是一个零长度的string(如果有一个查询string,它只是通过 – 我们可以完全忽略它,它将被保留)。

像这样的东西:

 RewriteRule ^/Microsoft-Server-ActiveSync(.*)$ https://seg.company.com/Microsoft-Server-ActiveSync$1 [R,L] 

L标志在当前的configuration中并不是必须的,但是通常只要确保没有重写就可以redirect目标。

尝试交换它,如果它不起作用,进一步深入研究发生的事情的一个好方法是打开RewriteLog文件,并打开RewriteLogLevel 9