IIS7:带句点的URL重写

IIS7:带句点的URL重写,iis,url-rewriting,asp.net-2.0,isapi,Iis,Url Rewriting,Asp.net 2.0,Isapi,我使用的是SEO友好的URL,通过将aspnet_isapi.dll映射到所有URL,我可以用ASP.NET处理大多数URL。(我在IIS中设置了一个处理程序映射,它对所有路径使用dll。(path=*)) 但是,当“子文件夹”的最后一个字符是句点时,这似乎不起作用。例如,我的URL为/brakes/a.B.S./,这不会触发映射。因此,我最终得到了404用于此类URL。有人知道我应该如何设置映射来触发它吗?(我尝试过*。但也不起作用。)尝试在web.config中更改此设置: <http

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


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

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

<httpRuntime relaxedUrlToFileSystemMapping="true" />


正如Matthew已经指出的,这在.NET4.0中是可以解决的,但在.NET2.0中不是。问题在于底层系统:Microsoft禁止名称以点(或空格)结尾,因为Windows资源管理器无法处理它们(但底层NTFS系统可以处理它们)

什么原因 在内部,对于.NET 2.0和.NET 4.0来说也是如此,web请求在某个时候被传递给方法
issuspiiousphysicalpath
。除此之外,该方法调用标准API,根据给定的路径创建“正式”路径。它不会创建此路径。然后将此正确路径与给定路径进行比较。如果它们不同(即,如果给定路径不存在于纠正的路径中),则视为可疑

您可以自己尝试:使用File.CreateFile创建文件“test.txt…”。这将成功,但生成的文件是“test.txt”。在上面的场景中,给定的文件“text.txt…”不适合创建的文件,因此它是可疑的,甚至从未到达web请求处理程序

即使是基础IIS设置中的404处理程序在这里也不起作用

牵强的解决办法 我在许多设置中使用了多年的一种变通方法(原因与此问题无关):在IIS前面安装Apache并将其配置为代理。这相对容易设置(在internet上丢失了一些示例),并且可以作为处理此类“非法请求”的缓冲区,将它们重写为IIS可以处理的内容


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

我正在使用Web API属性路由

选定的答案对我不起作用,它只是部分解决方案

为了确保Web API获得第一次破解,您不仅需要

<configuration>
  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true"/>
  </system.web>
</configuration>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>

你还需要有

<configuration>
  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true"/>
  </system.web>
</configuration>
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>

我在这个博客上找到了答案:


在我的例子中,我无法使用URL重写,而另一个原因是URL扫描


我在文本编辑器中打开了windows\system32\inetsrv\urlscan\urlscan.ini,并通过将其值更改为1启用了AllowDotInPath。。。我应该说得更清楚些。我正在运行.NET2.0,relaxedUrlToFileSystemMapping仅从4.0开始可用。你知道2.0版的东西吗?我认为这在.NET2上是不可能的。如果你真的需要这个功能,你考虑过迁移到.NET4吗?是的,我在阅读了更多关于relaxedUrlToFileSystemMapping属性的内容后得出了同样的结论。我不得不调整我的IIS配置和web.config中的一些其他项目,但我能够迁移到4.0。谢谢。可能重复:“找不到资源。”错误当URL末尾有一个“点”时,他遇到了相同的根本问题,但他用不同的关键字描述了他的症状,所以我从来没有看到过这个问题。他也在使用MVC,我没有,也没有指定他的IIS版本。希望这两个问题都能帮助人们在未来找到解决同样问题的答案。