
No servidor Apache (Xampp), criei um proxy de encaminhamento para filtragem de firewall que funciona bem, mas não entendo como usar o RewriteRule para redirecionar um URL proibido para uma página de erro personalizada.
Desejo redirecionar a solicitação para um arquivo html de erro local presente em meu servidor para informar ao cliente se o URL solicitado ao meu proxy não está autorizado.
No exemplo abaixo coloquei apenas a parte que não funciona (tenho outros RewriteRule para urls permitidas):
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>
Quando a url é permitida (caso 1), o proxy funciona bem e o Chrome recebe a página do site solicitado. Mas no caso de uma url que eu bani (caso 2), não há resposta do proxy.
Eu tentei várias sintaxes diferentes que encontrei, mas o navegador Chrome nunca recebe nenhuma resposta do meu servidor e apenas mostra sua página de erro: "Este site não está disponível" com o erro "ERR_TUNNEL_CONNECTION_FAILED".
Somente no caso de um Forward Proxy (não estou fazendo proxy reverso), é possível enviar de volta ao cliente um arquivo html customizado (ou sua url)?
Obrigado por qualquer ajuda
Editar em 23/10:
Esse pequeno proxy funciona bem, mas a única coisa que não sei fazer é enviar de volta uma página de erro ao cliente quando a URL for proibida.
Por isso perguntei se o RewriteRule usado em <Proxy *> para autorizar ou não a conexão, também pode ser usado para redirecionar para uma página de erro, como podemos fazer na configuração normal (não proxy). Algo como :
RewriteRule ^ https://192.168.0.100/path/to/firewall/firewall_deny.html [R=302,L]
Aparentemente o redirecionamento foi feito porque no Fiddler posso ver a página de redirecionamento 302 com o novo URL, mas o Chrome parece não recebê-lo.
Eu também tentei coisas como:
Redirect permanent path/to/firewall/
Mas também não parece funcionar nesta configuração de proxy de encaminhamento. Talvez você tenha que reescrever de alguma forma o cabeçalho ou outra coisa, para enviar de volta ao chrome a url da página de erro, pois ela passa por um túnel proxy.
Atualmente estou tentando usar outras soluções encontradas no ServerDefault, como ExtFilterDefine (mod_ext_filter.so) ou Substitute (mod_substitute.so) sem sucesso até agora.