【发布时间】:2020-09-13 08:07:11
【问题描述】:
今天早上,我推出了一个新的 .Net 网站(fw 4.6.1,之前的 4.5.1)投入生产。 IIS(我假设)从所有网页中剥离了扩展(即 index.aspx 刚刚成为索引)。我使用 IIS 重写使这些网站运行了 8 年以上。看起来 IIS 看到了“无扩展”网页,重写启动并将其发送到不存在的位置,产生 404。
我在 3 天前也进行了 Windows 更新(可能会错过这个问题,但不太可能)。重写规则基本上是说,如果找不到页面,请在“客户端”子目录中查找页面。规则如下:
<rewrite>
<rules>
<rule name="Client Relocation" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" negate="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="Clients/{R:0}" />
</rule>
</rules>
</rewrite>
我能够通过删除子目录中的重写规则来解决此问题:
<rewrite>
<rules>
<remove name="Client Relocation" />
</rules>
</rewrite>
因此,扩展名似乎已被剥离,然后 IIS 获取该页面并认为它不存在,因此重写规则生效。
所以,我的问题是:谁/什么在剥离扩展,我该如何阻止它这样做?
【问题讨论】:
-
重写规则不会更改 Web 浏览器中的 URL。因此,如果您观察到此类变化,则可能来自您的 Web 应用程序。 FRT可以说实话,docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/…
-
我安装了 FRT,以前从未使用过,并试图重现错误。它显示了一个丢失的 .gif(这是正确的),但不是在网页上。在我的开发服务器上,它正确显示没有扩展名的 .aspx。我会看看我是否可以在生产方面做点什么并报告。
-
我仍在处理 FRT,但参考您对 Web 应用程序的评论,我将网页放在调试器中,最后执行的行是:window.location.href = " /lmw/main/index.aspx";然后在 .Net 程序中,我在 index.aspx 的第一行放置一个断点,并在立即窗口中输入:Context.Request.ServerVariables["PATH_INFO"]; “/lmw/main/index” 如您所见,那里没有扩展名。那么,什么会取消 JS .href = 语句和被调用的 .Net 页面之间的扩展?
-
FRT 无痕迹。它针对所有页面、错误 100-999 和所有提供程序进行了配置。 windows.location.href = /lmw/main/index.aspx 但它显示为 /lmw/main/index
标签: asp.net iis url-rewriting