Как передать только часть URL с помощью ProxyPassMatch в Apache?

Я запускаю Apache 2.4 с приложением Python 3 / Django 3, оба в контейнерах Docker. Если мой контейнер Apache получает запрос с "/api", я хотел бы перенаправить этот запрос в контейнер Python. Таким образом, если мой запрос Apache

http://localhost:9090/api/states/US

Я хочу перенаправить на контейнер Python, используя URL

http://web:8000/states/US

В моем файле виртуального хоста у меня есть

<VirtualHost *:80>
    ServerName directory.example.com

    ProxyPassMatch    ^/api http://web:8000/(.*)
    ProxyPassReverse  ^/api http://web:8000/(.*)

Но когда я делаю запрос на "http://localhost:9090/api/states/US", я получаю следующее в журналах Docker

maps-web-1       | Not Found: /(.*)/api/states/US
maps-apache-1    | 172.23.0.1 - - [30/Jun/2022:20:23:49 +0000] "GET /api/states/US HTTP/1.1" 404 6128

Очевидно, мой ProxyPassMatch не корректен. Как мне правильно его настроить?

Судя по всему, вы пропустили кавычки. Попробуйте что-нибудь вроде

ProxyPassMatch    "/api(.*)" "http://web:8000$1"
ProxyPassReverse  "/api(.*)" "http://web:8000$1"

В приведенном выше примере (.*) - это селектор с изогнутыми скобками, который находит все, что находится после /api и помещает это в позицию $1 в следующей строке.

Вернуться на верх