
На сервере Apache (Xampp) я создал прямой прокси-сервер для фильтрации брандмауэра, который работает хорошо, но я не понимаю, как использовать RewriteRule для перенаправления запрещенного URL-адреса на пользовательскую страницу с ошибкой.
Я хочу перенаправить запрос в локальный HTML-файл ошибок, расположенный на моем сервере, чтобы сообщить клиенту, если URL-адрес, запрашиваемый им на моем прокси-сервере, не авторизован.
В примере ниже я поместил только ту часть, которая не работает (у меня есть другие правила RewriteRule для разрешенных URL):
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)?
Спасибо за любую помощь.
Редактировать 23/10:
Этот небольшой прокси-сервер работает хорошо, но единственное, чего я не знаю, так это как отправлять клиенту страницу с ошибкой, если URL-адрес запрещен.
Вот почему я спрашивал, можно ли использовать RewriteRule, используемый в <Proxy *> для авторизации или нет соединения, для перенаправления на страницу с ошибкой, как мы можем сделать в обычной конфигурации (не прокси). Что-то вроде:
RewriteRule ^ https://192.168.0.100/path/to/firewall/firewall_deny.html [R=302,L]
Судя по всему, перенаправление выполнено, поскольку в Fiddler я вижу страницу перенаправления 302 с новым URL-адресом, но Chrome, похоже, ее не получает.
Я также пробовал такие вещи, как:
Redirect permanent path/to/firewall/
Но это, похоже, тоже не работает, в этой конфигурации прямого прокси. Может быть, вам придется как-то переписать заголовок или что-то еще, чтобы отправить обратно в Chrome URL страницы с ошибкой, потому что он проходит через туннель прокси.
В настоящее время я пытаюсь использовать другие решения, найденные на ServerDefault, такие как ExtFilterDefine (mod_ext_filter.so) или Substitute (mod_substitute.so), но пока безуспешно.