IIS url 重写模块中可能存在错误,还是只有我一个人有这种问题?

IIS url 重写模块中可能存在错误,还是只有我一个人有这种问题?

好的,所以我想出了一个绝妙的主意,运行带有重写规则的 W2012 IIS8 来为我做一些反向代理,这并不是因为它是最好的选择,而是因为我不想再用另一个盒子解决另一个问题。

我设法让一切顺利运行,两个子目录链接到两个后端 Linux 服务器,所有出站标签似乎都按应有的方式重写。直到我尝试登录并意识到它跳过了一些表单字段。

经过一个漫长的夜晚,我终于找到了导致重写引擎不处理此情况下的表单的原因,这更多地与包含连字符或下划线的属性有关。我的 Linux 网站生成的表单包含以下行

<form accept-charset="UTF-8" action="/login" ...

其中当然包含连字符属性。

因此,我开始着手解决这个问题,并得出了以下结论:

/测试/默认.htm

<html>
    <a href="/ahrefpage.htm">This ahref has no dummy attribute</a>  </br>
    <a dummy="x" href="/ahrefpage.htm">This ahref has a dummy attribute</a> </br>
    <a dum-my="x" href="/ahrefpage.htm">This ahref has a hyphen dummy attribute</a> </br>
    <a dum_my="x" href="/ahrefpage.htm">This ahref has an underscore dummy attribute</a>    </br>
</html>

使用以下 web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules>
                <rule name="OutboundRewriteTestPage" preCondition="isHtml" enabled="true">
                    <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" customTags="" pattern="^/(.*)" />
                    <action type="Rewrite" value="/test/{R:1}" />
                </rule>
                <preConditions>
                    <preCondition name="isHtml">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
                <customTags>
                </customTags>
            </outboundRules>
        </rewrite>
        <urlCompression doStaticCompression="false" doDynamicCompression="false" />
    </system.webServer>
</configuration>

因此,结果页面是这样的

This ahref has no dummy attribute           https://portal.xx.com/test/ahrefpage.htm
This ahref has a dummy attribute            https://portal.xx.com/test/ahrefpage.htm
This ahref has a hyphen dummy attribute     https://portal.xx.com/ahrefpage.htm
This ahref has a underscore dummy attribute https://portal.xx.com/ahrefpage.htm

所以基本上问题是,这是微软对 Linux 上运行良好的技术的又一次糟糕实施,还是我错过了什么?除了修改源材料(这违背了目的)之外,还有其他解决方法吗?

谢谢,Chris.J

相关内容