Итак, на данный момент у меня есть виртуальный хост, настроенный на моем экземпляре Oracle HTTP Server с ProxyPass следующим образом:
ProxyPass ^/test/home/ https://example.com/
ProxyPassMatch ^/test/home/(.*)$ https://example.com/$1
ProxyPassReverse ^/test/home/(.*)$ https://example.com/$1
Когда я пытаюсь получить доступ, https://mywebsite.com/test/home/<url_from_other_server>
запрос, кажется, работает как и ожидалось. Однако, когда я пытаюсь получить доступ, https://mywebsite.com/test/home/
он не проксирует меня, https://example.com/
а вместо этого возвращает 404.
Подстановочный ProxyPassMatch
знак, похоже, работает для всех подадресов, к которым я пытаюсь получить доступ, а вот обычное ProxyPass
ключевое слово — нет.
Я также попытался удалить его ProxyPass
полностью, но получаю ту же ошибку 404 при попытке доступа к /test/home/
Есть ли у кого-нибудь идеи, что может быть причиной такого странного поведения?
Спасибо.
решение1
Ваше регулярное выражение не совсем верно. *
означает "ноль или более вхождений", поэтому https://mywebsite.com/test/home/
соответствует ему. Измените (.*)
на (.+)
, что означает "одно или более вхождений". Тогда ваш ProxyPassMatch больше не должен соответствовать этому URL.
Или просто удалите строку ProxyPassMatch полностью, она бесполезна, URL-адреса обрабатываются строкой ProxyPass автоматически.
ProxyPass /test/home/ https://example.com/
ProxyPassReverse /test/home/ https://example.com/
решение2
Проблема решена. Правильная конфигурация для этой конкретной проблемы следующая:
ProxyPass /test/home(.*)$ https://example.com/$1
ProxyPassReverse /test/home(.*)$ https://example.com/$1
Удаление косой черты и добавление подстановочного знака позволило нам проксировать все, что следует за /test/home
.
Спасибо всем за ваш вклад.