好吧,我认为这是相当简单的任务,但我在可靠地测试和找出我做错的地方时遇到了一些麻烦。我尝试遵循 Apache mod_rewrite 文档,但它似乎没有按我预期的方式工作。
我在 Exchange CAS 前面运行一个 Apache 服务器作为反向代理,用于公共 OWA 访问,我们想要拦截 ActiveSync 流量(简单模式匹配)并将其重定向到 AirWatch 安全电子邮件网关 (SEG) URL。所有其他(即 Web 浏览器 OWA)流量应照常发送到 CAS。
因此,我们开始做的事情是这样的,这对于 OWA 访问来说非常有效,但不执行 ActiveSync 到 SEG 的重定向:
<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/[无论如何]“:
<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>
当我进行此更改时(当然是在测试中),我从移动设备向其发送的流量似乎没有被重定向。相反,ActiveSync 流量只是像往常一样流向 Exchange CAS,就像规则没有被触发一样。
因此,有两个问题:
- 我添加的 RewriteRule 是否做了一些明显的错误?
- 我怎样才能比“在浏览器中点击 ActiveSync URL,检查 Web 服务器日志以找出它去了哪里”更智能地排除故障?
提前致谢!
问候,Jon Heese
答案1
嘿,这个配置看起来很熟悉是有原因的。嘿,乔恩!希望我没有留下太多让你收拾的烂摊子。
我认为您已经基本搞定了。但有一个小问题,手机应该发送/Microsoft-Server-ActiveSync
而不是/Microsoft-Server-Activesync
,因此会错过匹配。此外,不确定请求是否总是会遵循该路径,因此如果捕获的只是一个零长度字符串,我们希望它仍然有效(如果有一个查询字符串,它只会被执行 - 我们可以完全忽略它并且它会被保留)。
像这样:
RewriteRule ^/Microsoft-Server-ActiveSync(.*)$ https://seg.company.com/Microsoft-Server-ActiveSync$1 [R,L]
对于当前配置来说,这个L
标志并不是必需的,但通常最好这样做,以确保后续的重写不会对重定向目标造成影响。
尝试交换它,如果不奏效,那么进一步了解发生了什么的一个好方法是打开一个RewriteLog
文件,然后调出RewriteLogLevel 9
。