我有两个apache webservers,一个是public,一个是private。要求是用户将访问 PUBLIC 域并从 PRIVATE 域获取内容。 PUBLIC 域应为空,并且仅包含用于用户身份验证的.htaccess文件。
所有请求都将转到http://public.com:60001/
,并由apache重写为http://private:60001/
。用户无法直接访问 PRIVATE 域,但托管 PUBLIC 域的服务器已与其建立连接。
要实现这一点,我更新了 PUBLIC 域的虚拟主机以包含此内容:
<Directory "/wwwroot/public.com">
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)$ http://private:60001/$1 [P]
ProxyPassReverse http://private:60001/
</Directory>
执行此操作后,页面正在加载但有两个问题:
http://private:60001/
的形式,因此当用户点击链接时,他们会收到404错误(因为他们没有连接到)。有没有办法让apache重写那些指向http://public.com:60001/
的链接?感谢您的帮助
答案 0 :(得分:1)
Mod_proxy无法解决您的问题。您需要从私有中删除内容中的所有主机名。因此,而不是像以下链接:
<a href="http://private:60001/something/">
他们需要看起来像:
<a href="/something/">
否则,您可以查看mod_proxy_html,它实际上会破坏页面的内容(而不仅仅是请求),并将内容中的链接映射到私有内容,以便它们链接到public。有关示例,请参阅this link。
基本上,有些东西:
ProxyHTMLLogVerbose On
ProxyHTMLLinks a href
ProxyHTMLLinks link href
ProxyHTMLLinks form action
ProxyHTMLLinks script src for
ProxyHTMLLinks img src longdesc usemap
ProxyHTMLLinks iframe src
ProxyHTMLEvents onclick ondblclick onmousedown onmouseup \
onmouseover onmousemove onmouseout onkeypress \
onkeydown onkeyup onfocus onblur onload \
onunload onsubmit onreset onselect onchange
ProxyHTMLURLMap url\(http://private:60001([^\)]*)\) url(http://public:60001$1) Rihe