0

旧网站运行的论坛软件具有深深嵌入的网址,使其相信它是 www.domain.com - 并且其配置返回链接上的绝对网址。我们需要运行一个新服务器来接管 www.domain.com 的其余部分,并通过旧网站论坛进行代理,以便为 SEO 和书签维护现有的 url。

事实上,我们正在测试模式下运行新服务器(使用私有 /etc/hosts 文件或使用开发人员的代理),因此“旧”站点必须保留为 www.domain.com 一段时间,以供公众使用,但对于我们来说,它会像它上线时那样通过新站点进行代理。

旧服务器上的一个小帮助是 apache 指令“ServerAlias old.domain.com”在请求中使用该域时从论坛引擎返回正确的页面,但带有位置为http://www.domain 的 302 找到的标头。 com/forum为每个响应。(我认为,这对于任何在 apache 中使用ServerName www.domain.com ServerAlias old.domain.com的网站都是典型的。)

此外,mod_rewrite 似乎不是提高性能的方法,因为我们在论坛上一次有 500-1000 个用户“活着”,所以我们试图避免它。

(这个问题与我整天研究的所有其他重定向问题不同 - 没有其他问题讨论使用 www.domain.com 保留旧服务器但没有 DNS 指向它。这种情况需要旧服务器和论坛软件保留 www.domain .com 作为其配置。)

4

1 回答 1

0

花了这么多时间,在这里回答我自己的问题,让其他人受益:

链接上的绝对 url 没问题 - www.domain.com 很好,因为它指向新服务器,它将代理任何对 www.domain.com/forum/ 的请求。因此,我们不必担心在标题或 html 正文中重写这些 url。(而且我们不能简单地将 old.domain.com 暴露给搜索引擎或用户,因为这会影响 SEO 得分并被标记为不同 url 的重复内容)。

使用:

ProxyPass /forum/ http://old.domain.com/forum/

运行良好,我们甚至不需要 ProxyPassReverse,因为旧服务器没有返回 old.domain.com 而是 www.domain.com 给我们。

最大的问题是找到的 302 Location: www.domain.com/forum/ 标头 - 如果我们不去掉它,浏览器将重新加载该 url,再次点击 proxyPass,然后一遍又一遍地重新加载,直到“重定向太多” .

为了剥离它,我们仅对该位置使用 mod_headers 指令:

<Location "/forum/">
  Header unset location
</Location>

这必须在 ProxyPass 指令之后的配置中。(尽管文档说了什么, Header 指令将在内部工作)。

为了解决 /forum 不带斜杠 url,我们把它放在 ProxyPass 之前:

Redirect "/forum" http://www.domain.com/forum/

仍然存在一个问题,即某些 cookie 或其他方式以某种方式被破坏,并且登录凭据被忽略/拒绝。例如,论坛可能会将 cookie 内容与连接 IP 进行比较,但这更多是论坛操作的功能,而不是此通用解决方案的问题。

于 2017-01-21T05:32:53.430 回答