3

我有两个 apache 网络服务器,一个是公共的,一个是私有的。要求是用户将访问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 点相同的问题。

谢谢您的帮助

4

1 回答 1

1

Mod_proxy 不会解决您的问题。您将需要从私有内容中删除所有主机名。因此,不要使用以下链接:

<a href="http://private:60001/something/">

他们需要看起来像:

<a href="/something/">

否则,您可以查看mod_proxy_html,它实际上会破坏页面的内容(而不仅仅是请求)并将内容中的链接映射为私有,以便它们链接到公共。有关一些示例,请参见此链接

本质上,类似于:

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
于 2013-08-29T21:56:25.200 回答