私有到公共域重定向在apache中

时间:2013-08-29 20:54:43

标签: apache .htaccess mod-rewrite mod-proxy

我有两个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>

执行此操作后,页面正在加载但有两个问题:

  1. 网站页面的html代码中的所有链接都将采用http://private:60001/的形式,因此当用户点击链接时,他们会收到404错误(因为他们没有连接到)。有没有办法让apache重写那些指向http://public.com:60001/的链接?
  2. Ajax调用不起作用 - 生成404错误。我认为可能是因为与第1点相同的问题。
  3. 感谢您的帮助

1 个答案:

答案 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