向 Serverfault 社区问好!
我在尝试配置 IIS 以在同一台机器上的两个 Tomcat 服务器上打开相应的管理器 APP 时遇到问题。
http://servername:8081/manager
当我分别通过和http://servername:8080/manager
(另一个 Tomcat)直接调用站点时,一切运行正常。
当我尝试将请求重定向到http://servername/manager7
第一个 Tomcat 和http://servername/manager8
第二个服务器时,噩梦就开始了。即使我调用 URL,HTML Resonse 中的链接也始终包含 /manager7/ http://servername/manager8
...。
以下是我的重写规则。我在服务器级别设置它们。
<rewrite>
<globalRules>
<clear />
<rule name="Tomcat7" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*7*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="http://wwwts02:8081/{R:1}{R:2}" />
</rule>
<rule name="Tomcat8" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*8*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="Rewrite" url="http://wwwts02:8080/{R:1}{R:2}" />
</rule>
</globalRules>
<outboundRules>
<clear />
<rule name="Tomcat8" preCondition="Recognize Tomcat8" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match filterByTags="A, Form, Img, Link, Script" pattern="/manager*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
</conditions>
<action type="Rewrite" value="/manager8{R:1}" />
</rule>
<rule name="Tomcat7" preCondition="Recognize Tomcat7" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match filterByTags="A, Form, Img, Link, Script" pattern="/manager*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
</conditions>
<action type="Rewrite" value="/manager7{R:1}" />
</rule>
<preConditions>
<preCondition name="Recognize Tomcat8">
<add input="{REQUEST_URI}" pattern="(.)*/(.*)8/(.*)" />
</preCondition>
<preCondition name="Recognize Tomcat7">
<add input="{REQUEST_URI}" pattern="(.*)/(.*)7(.*)" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
有人能想到我还有其他选择吗?
我也尝试了 Microsoft 提供的 ISAPIRedirect.dll,但它似乎根本不支持重写 HTTP 响应。
请告诉我下一步该怎么做。
任何帮助都将不胜感激,如需进一步的信息,请随时询问。
抱歉,我的英语可能不好,因为我是德国人。
答案1
模式匹配*7*
无效。它表示<nothing><any times>
后面跟着<7><any times>
,更清楚一点:它匹配所有内容,因为其中0 or more
7
包含字符。
您可能想要匹配某些东西,例如(.*7.*)
——用于允许引用的括号{R:1}
。