我在 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 服务器为两个应用程序提供服务,为什么还要费心使用两个虚拟主机呢?您应该能够从同一虚拟主机为两种不同的语言提供服务,这样您就可以完全跳过反向代理步骤。