Apache 嵌套虚拟主机

Apache 嵌套虚拟主机

我在 Apache 服务器中有两个虚拟主机,我想做点什么但不知道是否可行。

问题是我已经用 ruby​​ 开发了主要应用程序,而博客则在 wordpress 中。所以现在我有这样的内容:

  • example.com 和 blog.example.com

我想要做的是,所有对 www.example.com/blog 的请求都由 blog.example.com 提供,但不进行重定向(即我不希望用户看到 URL 的变化)

到目前为止,我尝试过的是在 VirtualHost 中执行代理:

<Location  /blog>
    ProxyPassReverse http://blog.example.com
    ProxyPassReverse http://blog.example.com:80
    RewriteEngine On
    RewriteRule blog/(.*)$ http://blog.example.com/$1 [QSA,P,L]
</Location>

它可以工作,但是一旦我进入其他应用程序,所有链接都在 blog.example.com 内,而不是在 example.com/blog 中。

您知道解决这个问题的办法吗?

提前感谢您的帮助。

答案1

链接在您的内容中处理,而不是由 Apache 处理。 ProxyPassReverse仅翻译重定向 - 其他一切都由您决定。

通过在内容中使用主机相对路径来修复此问题 - 不要链接到http://blog.example.com/dir/page.html,而是链接到/dir/page.html

如果链接是由 WordPress 动态生成的,那么它可能正在读取主机头;这ProxyPreserveHost将是解决这个问题的正常方法,但如果两个虚拟主机都在同一个侦听器上,它将不起作用 - 您最终会将请求直接反馈给执行代理的虚拟主机。

答案2

对于反向代理,修复内容输出中的链接(如另一个答案中所述)是更好的方法mod_proxy_html是另一种可能性。

话虽如此,如果您从同一 Apache 服务器为两个应用程序提供服务,为什么还要费心使用两个虚拟主机呢?您应该能够从同一虚拟主机为两种不同的语言提供服务,这样您就可以完全跳过反向代理步骤。

相关内容