好的,所以我想出了一个绝妙的主意,运行带有重写规则的 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