如何在Apache 2.4中通过新的代理旧网站的一部分

ehxuflar  于 2022-12-14  发布在  Apache
关注(0)|答案(1)|浏览(129)

旧网站必须在www.domain.com下运行/在开发期间保持在线。
旧网站运行的论坛软件中有很深的url,使其相信它是www.domain.com-它的配置产生了指向www.domain.com的绝对url的链接。我们需要运行一个新的服务器来接管www.domain.com的其余部分,并通过旧网站的代理论坛,使现有的url都保持搜索引擎优化和书签。
一个关于旧服务器的小帮助apache指令“ServerAlias old.domain.com“在请求中使用该域时从论坛引擎返回正确的页面,但带有一个302找到的标头 *Location:http://www.domain.com/forum。(这是apache中具有 * 服务器名称www.domain.com服务器别名old.domain.com 的任何网站的典型情况。)
Mod_rewrite并不是一种提高性能的方法,因为我们在论坛上一次有500-1000个用户,所以我们试图避免它。
(This这个问题与这里找到的所有其他重定向问题不同-没有其他问题讨论保留使用www.domain.com的旧服务器,但没有DNS指向它。这种情况要求旧服务器和论坛软件保留www.domain.com作为其配置。)

uujelgoq

uujelgoq1#

花了这么多时间在这上面,在这里回答我自己的问题让别人受益:
链接上的绝对url是可以的--www.domain.com是可以的,因为它指向一个新的服务器,这个服务器将代理任何发往www.example.com的请求www.domain.com/forum/。因此,我们不必担心在标头或html正文中重写这些url。(我们不能简单地将www.example.com暴露old.domain.com给搜索引擎或用户,因为这将影响SEO评分并被标记为不同URL重复内容)。
使用:

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

运行良好,我们甚至不需要ProxyPassReverse,因为旧服务器返回的不是old.domain.com而是www.domain.com。
最大的问题是302发现位置:www.domain.com/forum/头-如果我们不剥离,浏览器将重新加载该网址,再次点击proxyPass,并重新加载一遍又一遍,直到'太多的重定向'。
为了去掉这个部分,我们使用mod_headers指令,只用于该位置:

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

这必须在配置中ProxyPass指令之后。(不管文档怎么说,Header指令将在里面工作)。
要解决/forum没有尾随斜杠的url,我们把这个放在ProxyPass之前:

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

一个问题仍然存在,一些cookie或以其他方式被损坏,登录凭据被忽略/拒绝.论坛可能会比较cookie内容与连接IP,但这更多的是论坛的操作功能,而不是这个一般解决方案的问题.

相关问题