Хорошо, я думаю, что это довольно простая задача, но у меня возникли небольшие проблемы с надежным тестированием и выяснением того, что я сделал не так. Я пытался следовать документации Apache mod_rewrite, но, похоже, она работает не так, как я ожидал.
У меня есть сервер Apache, работающий как обратный прокси-сервер перед Exchange CAS для общедоступного доступа к OWA, и мы хотим перехватывать трафик ActiveSync (простое сопоставление с шаблоном) и перенаправлять его на URL-адрес безопасного шлюза электронной почты (SEG) AirWatch. Весь остальной трафик (например, OWA веб-браузера) должен отправляться в CAS как обычно.
Итак, мы начали с чего-то вроде этого, и это отлично работает для доступа к OWA, но не выполняет перенаправление ActiveSync-to-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>
Поэтому я добавил эту строку (ту, что посередине), пытаясь переписать URL-адреса, начинающиеся с "/ Microsoft-Server-Activesync / [something]", в "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>
Когда я внес это изменение (разумеется, в ходе тестирования), трафик, который я отправляю на него с мобильного устройства, похоже, не перенаправляется. Вместо этого трафик ActiveSync просто течет к Exchange CAS как обычно, как будто правило не срабатывает.
Итак, два вопроса:
Заранее спасибо!
С уважением, Джон Хиз
Хех, эта конфигурация не зря показалась знакомой. Привет, Джон! Надеюсь, я не оставил вам слишком много беспорядка.
Я думаю, ты почти добился успеха. Одна небольшая проблема с чувствительностью к регистру, телефоны должны отправлять /Microsoft-Server-ActiveSync
вместо того /Microsoft-Server-Activesync
, так что пропустить матч. Кроме того, не уверен, что в запросах всегда будет что-то, что следует по этому пути, поэтому мы хотим, чтобы он все еще работал, если захват представляет собой просто строку нулевой длины (и если есть строка запроса, она просто переносится - мы можем полностью игнорируйте его, и он будет сохранен).
Что-то вроде этого:
RewriteRule ^/Microsoft-Server-ActiveSync(.*)$ https://seg.company.com/Microsoft-Server-ActiveSync$1 [R,L]
В L
flag на самом деле не требуется с текущей конфигурацией, но, как правило, хорошо иметь его, просто чтобы убедиться, что никакие перезаписи дальше по строке не приводят к изменению цели перенаправления.
Попробуйте поменять местами, и если это не сработает, хорошим способом разобраться в том, что происходит, было бы включить RewriteLog
файл и включите RewriteLogLevel 9
.