在使用 Apache 代理时,有时候需要使用 ProxyRemote 指令来指定代理服务器。使用 ProxyRemote 指令时,如果希望只有符合特定条件的请求才会转发到代理服务器,可以使用表达式来限定,如下所示:
ProxyRemote "*example.com*" "http://proxy.example.com:8080"
上述例子中,只有请求域名中含有 "example.com" 的请求才会被转发到代理服务器。
但是,有时候会发现即使使用了表达式来限定符合条件的请求,但某些请求仍然被转发到代理服务器,这可能是因为表达式写得不正确。
为了确保表达式的正确性,可以使用 RewriteCond 指令来测试表达式是否能够匹配正确的请求。例如:
RewriteEngine On
RewriteCond %{HTTP_HOST} example\.com
RewriteRule ^ - [E=test_uri:%{REQUEST_URI}]
ProxyRemoteMatch "^https?://.*example\.com/.*$" "http://proxy.example.com:8080" ${test_uri}
上述例子中,使用 RewriteCond 指令测试 HTTP_HOST 是否是 example.com,如果是,则将 REQUEST_URI 赋值给 test_uri 变量。然后使用 ProxyRemoteMatch 指令来匹配请求,其中第三个参数就是表达式,这里使用了 test_uri 变量。
通过这种方法,可以确保表达式的正确性,并且只有符合条件的请求才会被转发到代理服务器。