关于iis:IIS7:带句点的URL重写

IIS7: URL Rewriting with period

我正在使用SEO友好的URL,并且可以通过将aspnet_isapi.dll映射到所有URL来使用ASP.NET处理它们中的大多数。 (我在IIS中设置了将dll用于所有路径的处理程序映射。(路径= *))

但是,当"子文件夹"的最后一个字符是句点时,这似乎不起作用。例如,我有一个/brakes/A.B.S./的URL,它不会触发映射。因此,我最终得到了此类URL的404。有人知道我应该如何设置映射以触发此操作? (我尝试过*。而且也不起作用。)


尝试在web.config中更改此设置:

1
<httpRuntime relaxedUrlToFileSystemMapping="true" />

http://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx


在我的情况下,我无法使用URL重写来完成此操作,而还有另一个原因是URL扫描。

我在文本编辑器中打开了windows \\\\ system32 \\\\ inetsrv \\\\ urlscan \\\\ urlscan.ini,并通过将其值更改为1启用了AllowDotInPath。


我正在使用Web API属性路由

选择的答案对我不起作用,仅是部分解决方案。

要确保Web API首次破解,不仅需要

1
2
3
4
5
<configuration>
  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true"/>
  </system.web>
</configuration>

您还需要具有

1
2
3
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>

我在此博客中找到了答案:

允许在ASP.NET MVC应用程序(特别是IIS 7)中使用DOT


正如Matthew所指出的那样,这在.NET 4.0中是可以解决的,但在.NET 2.0中则无法解决。问题出在底层系统上:Microsoft禁止名称以点(或空格)结尾,因为Windows资源管理器无法处理它们(但是底层NTFS系统可以处理它们)。

是什么原因

在内部,这对于.NET 2.0和.NET 4.0都是正确的,Web请求有时会传递给方法IsSuspiciousPhysicalPath。除其他外,此方法调用标准API以根据给定的路径创建"官方"路径。它不会创建此路径。然后,它将正确的路径与给定的路径进行比较。如果它们不同(即如果给定路径不存在于更正路径中),则认为可疑。

您可以自己尝试:使用File.CreateFile创建文件" test.txt ...."。这将成功,但是结果文件为" test.txt"。在上述情况下,给定的文件" text.txt ...."不适合所创建的文件,因此它是可疑的,甚至从未到达Web请求处理程序。

即使基本IIS设置中的404处理程序在这里也无法使用!

一个牵强的解决方法

一种我已经在许多设置中使用多年的变通方法(由于与该问题无关的原因):在IIS之前安装Apache并将其配置为用于代理。这相对容易设置(在互联网上丢失示例),并且可以充当处理此类"非法请求"的缓冲区,将其重写为IIS可以处理的内容。

但是,简单地从.NET 2.0迁移到.NET 4.0可能更容易