代码之家  ›  专栏  ›  技术社区  ›  Thomas

IIS URLRewite:如何为内部重定向保留原始主机名?

  •  1
  • Thomas  · 技术社区  · 7 年前

    我将传入规则配置为用web应用程序服务器的地址重写反向代理地址。这很好用。

    然而,该应用程序允许用户下载一些内容并将其重定向到下载地址。现在,用户被转发到web应用服务器的本地IP地址,而不是反向代理的公共地址。

    我按照这里的指示做了 https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/modifying-http-response-headers

    我现在的重写规则是这样的

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="er-platform" stopProcessing="true">
                        <match url="^er-platform(.*)" />
                        <conditions>
                            <add input="{CACHE_URL}" pattern="^(https?)://" />
                        </conditions>
                        <action type="Rewrite" url="{C:1}://192.168.80.6:8443/{R:0}" />
                        <serverVariables>
                            <set name="ORIGINAL_HOST" value="{HTTP_HOST}" />
                        </serverVariables>
                    </rule>
                </rules>
                <outboundRules>
                    <rule name="er-platform" preCondition="IsRedirection" enabled="true">
                        <match serverVariable="RESPONSE_LOCATION" pattern="^(https?)://[^/]+/(.*)" />
                        <conditions logicalGrouping="MatchAny">
                            <add input="{ORIGINAL_HOST}" pattern=".+" />
                        </conditions>
                        <action type="Rewrite" value="{R:1}://{ORIGINAL_HOST}/{R:2}" />
                    </rule>
                    <preConditions>
                        <preCondition name="IsRedirection">
                            <add input="{RESPONSE_STATUS}" pattern="3\d\d" />
                        </preCondition>
                    </preConditions>
                </outboundRules>
            </rewrite>
        </system.webServer>
    </configuration>
    

    当我试图下载一些东西时,我仍然会被重定向到本地IP。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Sam Rueby    7 年前

    我认为你的出境规则没有错。我有几个猜测为什么它失败了。

    必须 匹配出站规则以使其生效。这是因为 ORIGINAL_HOST ^er-platform(.*) . 我将假设,由于这是一个反向代理,它正在工作,因为如果它不工作,您将无法启动下载。

    第二:输出规则仅在3xx代码上触发。但这并不是重定向的唯一方法。您可能正在使用JavaScript重定向。E、 g.`窗户。位置=' http://wrongaddress '. 在这种情况下,您的出站规则将不起作用。

    调试的下一步: 启用入站规则的日志记录。 IIS Manager Log rewritten URL checkbox

    验证线路上发生的情况: Fiddler

    除了Fiddler之外,你们也可以直接使用Chrome开发者工具网络标签。打开“保留日志”复选框,以便在重定向后它不会被清除。验证您认为应该发生的事情实际上正在发生。