**根据评论纠正后根据我的最新情况更新此问题**
我已经安装了ARR
我遵循了这篇文章https://halfblood.pro/the-very-common-mistakes-when-using-iis-url-rewrite-module-a2ab7e4fee59以避免常见错误
我托管了 2 个 IIS 站点,其中很少有“.html”页面。
下面是我的 HTMLSite1 Web 配置文件中的重写规则。
<rule name="Rewrite Page 3 to Page 4">
<match url="Page3.html" />
<conditions>
<add input="{HTTP_HOST}" pattern="^htmlsite1$" />
</conditions>
<action type="Rewrite" url="http://htmlsite1/Page4.html" logRewrittenUrl="true" />
</rule>
<rule name="Rewrite HTML Site 1 Page 1 to HTML Site 2 Page 4">
<match url="Page1.html" />
<conditions>
<add input="{HTTP_HOST}" pattern="^htmlsite1$" />
</conditions>
<action type="Rewrite" url="http://htmlsite2/Page4.html" logRewrittenUrl="true" />
</rule>
上述规则对于两种重写都运行良好。一个在站点中,另一个正在重写到另一个站点。
URL重写-1
URL重写-2
然后
我托管了 2 个 IIS 站点,其中很少有“.aspx”页面。
此应用程序是示例 ASP.NET Web 应用程序,其中包含“主”页面。
下面是我的 TestSite1 Web 配置文件中的重写规则。
<rule name="Rewrite testsite1 Menu Page to testsite1 Contact Page">
<match url="Menu" />
<conditions>
<add input="{HTTP_HOST}" pattern="^testsite1$" />
</conditions>
<action type="Rewrite" url="Contact" logRewrittenUrl="true" />
</rule>
上面的重写也有效。 (重写为域中的with)
以下重写在重写到另一个站点/域时不起作用
我在我的 testsite1 web.config 中有另一个跨域的 URL 重写,如下配置
<rule name="Rewrite testsite1 About Page to testsite2 Menu Page">
<match url="About" />
<conditions>
<add input="{HTTP_HOST}" pattern="^testsite1$" />
</conditions>
<action type="Rewrite" url="http://testsite2/Menu" logRewrittenUrl="true" />
</rule>
已更新
我点击了 URL http://testsite1/About
期望 URL 不应更改并期望来自 http://testsite2/About 的响应
但是似乎发生了 URL 重写。我仅从 http://testsite1/About 收到回复。
我确实启用了 FRT 来诊断此问题,并从日志文件中找到了以下内容。
在日志文件中,我看到以下 2 次事件“URL_CHANGED”
第一次看,感觉还不错。
第二次,又变回实际的URL了。这就是问题所在,不知道为什么会发生这种情况。
<EventData>
<Data Name="ContextId">{40000045-0000-F200-B63F-84710C7967BB}</Data>
<Data Name="OldUrl">/About</Data>
<Data Name="NewUrl">http://testsite2/About</Data>
</EventData>
<EventData>
<Data Name="ContextId">{40000045-0000-F200-B63F-84710C7967BB}</Data>
<Data Name="OldUrl">http://testsite2/About</Data>
<Data Name="NewUrl">/About</Data>
</EventData>
完整的 FRT 活动:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>5</Level>
<Opcode>4</Opcode>
<Keywords>0x400</Keywords>
<TimeCreated SystemTime="2023-09-21T12:24:50.218Z"/>
<Correlation ActivityID="{40000045-0000-F200-B63F-84710C7967BB}"/>
<Execution ProcessID="15492" ThreadID="27696"/>
<Computer>XXXXXXXXXXX</Computer>
</System>
<EventData>
<Data Name="ContextId">{40000045-0000-F200-B63F-84710C7967BB}</Data>
<Data Name="RuleName">Rewrite testsite1 About Page to testsite2 About Page</Data>
<Data Name="RequestURL">http://testsite2/About</Data>
<Data Name="QueryString"></Data>
<Data Name="StopProcessing">false</Data>
<Data Name="Succeeded">true</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>RULE_EVALUATION_END</Opcode>
<Keywords>
<Keyword>Rewrite</Keyword>
</Keywords>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{0469ABFA-1BB2-466A-B645-E3E15A02F38B}</EventGuid>
</ExtendedTracingInfo>
</Event>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>5</Level>
<Opcode>12</Opcode>
<Keywords>0x400</Keywords>
<TimeCreated SystemTime="2023-09-21T12:24:50.218Z"/>
<Correlation ActivityID="{40000045-0000-F200-B63F-84710C7967BB}"/>
<Execution ProcessID="15492" ThreadID="27696"/>
<Computer>XXXXXXXXXXXX</Computer>
</System>
<EventData>
<Data Name="ContextId">{40000045-0000-F200-B63F-84710C7967BB}</Data>
<Data Name="Substitution">http://testsite2/About</Data>
<Data Name="RewriteURL">http://testsite2/About</Data>
<Data Name="AppendQueryString">true</Data>
<Data Name="LogRewrittenURL">true</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>REWRITE_ACTION</Opcode>
<Keywords>
<Keyword>Rewrite</Keyword>
</Keywords>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{0469ABFA-1BB2-466A-B645-E3E15A02F38B}</EventGuid>
</ExtendedTracingInfo>
</Event>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>4</Level>
<Opcode>42</Opcode>
<Keywords>0x0</Keywords>
<TimeCreated SystemTime="2023-09-21T12:24:50.218Z"/>
<Correlation ActivityID="{40000045-0000-F200-B63F-84710C7967BB}"/>
<Execution ProcessID="15492" ThreadID="27696"/>
<Computer>XXXXXXXXXXX</Computer>
</System>
<EventData>
<Data Name="ContextId">{40000045-0000-F200-B63F-84710C7967BB}</Data>
<Data Name="OldUrl">/About</Data>
<Data Name="NewUrl">http://testsite2/About</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>URL_CHANGED</Opcode>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{D42CF7EF-DE92-473E-8B6C-621EA663113A}</EventGuid>
</ExtendedTracingInfo>
</Event>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>4</Level>
<Opcode>2</Opcode>
<Keywords>0x400</Keywords>
<TimeCreated SystemTime="2023-09-21T12:24:50.218Z"/>
<Correlation ActivityID="{40000045-0000-F200-B63F-84710C7967BB}"/>
<Execution ProcessID="15492" ThreadID="27696"/>
<Computer>XXXXXXXXXXX</Computer>
</System>
<EventData>
<Data Name="ContextId">{40000045-0000-F200-B63F-84710C7967BB}</Data>
<Data Name="RequestURL">http://testsite2/About</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>URL_REWRITE_END</Opcode>
<Keywords>
<Keyword>Rewrite</Keyword>
</Keywords>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{0469ABFA-1BB2-466A-B645-E3E15A02F38B}</EventGuid>
</ExtendedTracingInfo>
</Event>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="WWW Server" Guid="{3A2A4E84-4C21-4981-AE10-3FDA0D9B0F83}"/>
<EventID>0</EventID>
<Version>1</Version>
<Level>4</Level>
<Opcode>42</Opcode>
<Keywords>0x0</Keywords>
<TimeCreated SystemTime="2023-09-21T12:24:50.218Z"/>
<Correlation ActivityID="{40000045-0000-F200-B63F-84710C7967BB}"/>
<Execution ProcessID="15492" ThreadID="27696"/>
<Computer>XXXXXXXXXXX</Computer>
</System>
<EventData>
<Data Name="ContextId">{40000045-0000-F200-B63F-84710C7967BB}</Data>
<Data Name="OldUrl">http://testsite2/About</Data>
<Data Name="NewUrl">/About</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Opcode>URL_CHANGED</Opcode>
</RenderingInfo>
<ExtendedTracingInfo xmlns="http://schemas.microsoft.com/win/2004/08/events/trace">
<EventGuid>{D42CF7EF-DE92-473E-8B6C-621EA663113A}</EventGuid>
</ExtendedTracingInfo>
</Event>
也许您尚未指定所有 IIS 设置。
也许您在 ARR 中配置了代理请求
iis machine root node->Application Request Routing Cache->Server Proxy Settings->Enable Proxy=true
,因此具有静态内容的网站的重定向可以正常工作。
也许您已为具有动态内容 (aspx) 的站点配置了服务器场。
如果是这种情况,那么原因是您在重定向规则中指定的地址是服务器场中的记录名称,并且在标头中进行代理时,它没有被替换,因此请求不会到达 testsite2,而是转到到测试站点1。
要解决此问题,您可以删除服务器场条目并使用 ARR 代理,或者使用这个相当简单的解决方案https://techcommunity.microsoft.com/t5/iis-support-blog/arr-change-the-hostname-on-重新路由到后端节点/ba-p/1340780