我正在尝试将http://redmine
(IIS 绑定) 的请求重写为http://web01:8080/redmine
(apache 绑定且 ruby 为 redmine 提供服务)。请注意,我还有一个 A 记录绑定http://intranethome
到http://web01:80
https://web01:443
我主要参考了以下内容:
- http://www.iis.net/learn/extensions/url-rewrite-module/reverse-proxy-with-url-rewrite-v2-and-application-request-routing
- http://blogs.iis.net/owscott/creating-a-reverse-proxy-with-url-rewrite-for-iis
我相信下面的方法应该可行,但事实并非如此:
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="redmine(.*)" />
<action type="Rewrite" url="http://web01:8080/redmine{R:1}" logRewrittenUrl="true" />
</rule>
</rules>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^http(s)?://web01:8080/redmine(.*)" />
<action type="Rewrite" value="http{R:1}://redmine/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
我在 Apache 中做过类似的事情,但似乎无法理解 IIS 的问题。任何意见都值得赞赏。
答案1
我意识到您可能正在寻找本机的 IIS 解决方案,我确信它可能存在,但过去我曾在企业环境中使用 Helicon Ape(它是 IIS 的 Apache .htaccess/module 实现)成功完成了此操作。
您要做的事情似乎可以通过 Helicon Ape 中的 Apache mod_rewrite/mod_proxy 轻松完成。这款软件一直是我进行 IIS 重写的首选,因为 ISAPI 是一场噩梦,而 IIS 6(我们仍在很多机器上运行)不支持本机重写模块。
设置 Helicon Ape 时需要进行非常少量的配置,例如确保 IIS 组可以访问 Program Files 中的一个 Helicon 目录,但之后一切都很容易,特别是如果您已经熟悉 .htaccess 的话。
在您的默认网站中,您将看到 httpd.conf,您将在其中启用 mod_rewrite 和/或 mod_proxy,然后在您特定网站下的 Helicon Ape 模块中的 .htaccess 中添加您的特定规则。
如果决定采用这种方式,但在配置方面遇到问题,请发布后续信息,我可以提供更具体的说明。仅供参考,Helicon Ape 每次安装最多可获得 3 个站点的许可证。
答案2
在疯狂处理出站规则之前,请先确认入站规则是否有效。这是第一步吗?
<rewrite>
<rules>
<rule name="RedirectToRedmine" stopProcessing="true">
<match url=".*" />
<action type="Redirect" url="http://web01:8080/redmine/{R:0}" />
</rule>
</rules>
</rewrite>