Конфигурация обратного прокси apache2

У меня есть одно приложение, которое слушает по TCP 127.0.0.1:81. Я хочу выполнить следующее перенаправление:

www.example.com/?requestid=123456 --> http://127.0.0.1:81/?requestid=123456
www.example.com/ANYTHING_ELSE --> MY_IP_THAT_APACHE_LISTENS_ON

Насколько я понимаю, если я не буду что-то переписывать явно, он будет следовать обычному пути к / var / www / html.

Моя /etc/apache2/sites-enabled/000-default.conf конфигурация:

<VirtualHost *:80>
        ServerName example.com
        ServerAdmin example@example.com
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Location />
        RewriteEngine On
        RewriteRule ^/?requestid(.*)$ http://127.0.0.1:81/$1 [P]
        ProxyPassReverse http://127.0.0.1:81/
        Order allow,deny
        Allow from all
    </Location>

</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Почему он не переписывает правильно и продолжает бить нормальный патч?

Not Found
The requested URL /bullshit was not found on this server.

Apache/2.4.25 (Debian) Server at example.com Port 80

1 ответ

Ответ был опубликован: [переполнение стека]

Из директивы RewriteRule:

В контексте VirtualHost шаблон будет сначала сопоставляться с частью URL после имени хоста и порта, а также перед строкой запроса (например, "/app1/index.html"). Это (%-декодированный) URL-путь.

Если вы хотите сопоставить имя хоста, порт или строку запроса, используйте RewriteCond с переменными%{HTTP_HOST}, %{SERVER_PORT} или%{QUERY_STRING} соответственно.

Итак, вам понадобится что-то вроде этого:

RewriteEngine On
RewriteCond %{QUERY_STRING} requestid=(.+)
RewriteRule ^/$ http://127.0.0.1:81/?requestid=%1 [P]
Другие вопросы по тегам