ProxyPass и RewriteRule [P] действуют по-разному в отношении http/https

У меня есть рабочая конфигурация, которая выглядит так

ProxyPass /roundcube protocol://127.0.0.1:8080/roundcube
ProxyPassReverse /roundcube protocol://127.0.0.1:8080/roundcube

когда я иду в

http://www.example.com/roundcube
or
https://www.example.com/roundcube

оба или должным образом проксированы на сервер 127.0.0.1:8080, как и ожидалось.

Однако я хотел бы иметь больше контроля над тем, когда происходит проксирование, поэтому я хотел бы использовать параметр mod_rewrite [P], а не директиву ProxyPass, показанную выше. Я пробовал следующее:

RewriteEngine On
RewriteRule ^/roundcube$ /roundcube/ [R]
RewriteRule ^/roundcube/(.*) protocol://127.0.0.1:8080/roundcube/$1 [P]
ProxyPassReverse /roundcube protocol://127.0.0.1:8080/roundcube

С этой конфигурацией, когда я перехожу к

http://www.example.com/roundcube

запрос проксируется правильно, как и ожидалось.

НО когда я иду в

https://www.example.com/roundcube

запрос 404.

Итак, мой вопрос: почему прокси-сервер mod_rewrite не работает так же, как версия ProxyPass, в отношении запросов http и https? Мои два приведенных выше примера должны быть функционально эквивалентны, исходя из моего понимания, но, похоже, это не так. Что мне не хватает? Я не смог отследить какую-либо документацию, которая объясняла бы это. Спасибо!


person user2471582    schedule 10.06.2013    source источник


Ответы (1)


Хотя может быть уже слишком поздно, я публикую этот ответ на случай, если кто-то придет на эту страницу с той же проблемой.

Синтаксис ProxyPass отличается от RewriteRule. В RewriteRule для ссылки на протокол следует использовать %{SERVER_PROTOCOL}, как описано на странице http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

person tnabil    schedule 13.08.2015