Как передать только часть 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 в следующей строке.