Apache 服务器正向代理:如何重定向到自定义页面?

Apache 服务器正向代理:如何重定向到自定义页面?

在 Apache 服务器(Xampp)上,我已经为防火墙过滤创建了一个运行良好的正向代理,但我不明白如何使用 RewriteRule 将禁止的 URL 重定向到自定义错误页面。

我希望将请求重定向到我的服务器上的本地错误 html 文件,以便通知客户端它向我的代理请求的 url 是否未经授权。

在下面的例子中,我只放了不起作用的部分(我有其他允许的 URL 的 RewriteRule):

  Listen 192.168.0.100:3128
<VirtualHost 192.168.0.100:3128>
  
  ServerName 192.168.0.100:3128  
  ProxyRequests On  
  ProxyVia On
  
  <Proxy *>
     
     # 1) If url is allowed (this part works well):
       ... some RewriteCond & RewriteRule ...
     
     # 2) If url is not allowed by some RewriteCond:
       RewriteRule ^ https://192.168.0.100/firewall/firewall_deny.html [R=302,L]
     OR
       RewriteRule ^ https://192.168.0.100/firewall/firewall_deny.html [P,L]
  
  </Proxy>
   
</VirtualHost>

当 URL 被允许时(情况 1),代理可以正常工作,Chrome 可以收到请求的网站页面。但是,如果 URL 已被我禁止(情况 2),代理则不会给出任何答复。

我尝试了很多不同的语法,但 Chrome 浏览器从未从我的服务器收到任何答复,只是显示其错误页面:“该站点不可用”,错误为“ERR_TUNNEL_CONNECTION_FAILED”。

仅在正向代理的情况下(我没有执行反向代理),是否可以将自定义 html 文件(或其 url)发送回客户端?

谢谢你的帮助

10月23日编辑:

这个小代理运行良好,但我唯一不知道的是当 URL 被禁止时向客户端发送回一个错误页面。

这就是为什么我要问 <Proxy *> 中用于授权或不授权连接的 RewriteRule 是否也可以用于重定向到错误页面,就像我们在正常配置(非代理)中可以做的那样。类似于:

RewriteRule ^ https://192.168.0.100/path/to/firewall/firewall_deny.html [R=302,L]

显然重定向已经完成,因为在 Fiddler 中我可以看到带有新 url 的 302 重定向页面,但 chrome 似乎没有收到它。

我也尝试过类似的事情:

Redirect permanent path/to/firewall/

但是,在这种正向代理配置下,它似乎也不起作用。也许您必须以某种方式重写标头或其他内容,以将错误页面的 URL 发送回 chrome,因为它会经过代理隧道。

目前我正在尝试使用在 ServerDefault 上找到的其他解决方案,例如 ExtFilterDefine (mod_ext_filter.so) 或 Substitute (mod_substitute.so),但到目前为止没有成功。

相关内容