【发布时间】:2011-07-17 08:38:47
【问题描述】:
我有一个在 Linux 上运行的 Apache 服务器。在同一台主机上,我使用 Windows Server 2008 + IIS 运行 Xen。 Windows 获得不同的 IP 地址。
主机位于 NAT 后面,我已将其配置为将端口 80 定向到 Linux,将 8080 定向到 Windows。
Apache 提供了一个虚拟主机来处理传入的请求,但这些请求只需要重定向到 IIS,因此我的重写规则可以表示如下:
<VirtualHost ...>
ServerName www.firstdomain.com
...
RewriteEngine On
RewriteOptions Inherit
RewriteRule ^/(.*) http://www.seconddomain.com:8080/$1 [R,L]
这很好用,因为对 www.seconddomain.com 的请求进入 Apache VH,它将 URL 重写为 www.secondomain.com:8080,因此浏览器现在登陆 IIS。
我的问题:我不希望用户看到 URL 已更改;我希望它的行为方式与规则的直通选项的工作方式相同。
我怎样才能做到这一点?而且,如果重写规则是错误的方法,那么更好的方法是什么?
更新
我找到了规则的 [P]roxy 标志。这(几乎)效果很好。我可以将文件放在我的 IIS 的根目录中并通过http://www.seconddomain.com/tst.html 访问它 - 但是,文档中的引用不会正确重定向,例如<img src='/images/tst.jpg' /> 失败,显示应该有一个图像在它的位置......我还需要什么?
【问题讨论】:
-
它叫做Reverse Proxy。检查这些链接:httpd.apache.org/docs/current/rewrite/proxy.html AND httpd.apache.org/docs/current/mod/mod_proxy.html。不幸的是,我自己从未与他们合作过,也无法真正将其作为答案(这需要比这个小评论更多的细节)。顺便说一句,将ServerFault 视为提出代理问题的地方——这是更合适的地方。
-
您需要
ProxyPassReverse指令来修复此类损坏的网址 -
@LazyOne,谢谢...我解决了我的问题,但感谢您建议反向代理。我正在调查。
标签: mod-rewrite apache2