apache2 反向代理配置

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 [email protected]
        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

答案发布于:[stack overflow]

来自 RewriteRule 指令:

在 VirtualHost 上下文中,模式将首先与 URL 中主机名和端口之后、查询字符串之前的部分进行匹配(例如“/app1/index.html”)。这是(% 解码的)URL 路径。

如果您希望匹配主机名、端口或查询字符串,请分别使用带有 %{HTTP_HOST}、%{SERVER_PORT} 或 %{QUERY_STRING} 变量的 RewriteCond。

因此,你需要这样的东西:

RewriteEngine On
RewriteCond %{QUERY_STRING} requestid=(.+)
RewriteRule ^/$ http://127.0.0.1:81/?requestid=%1 [P]

相关内容