IIS7:使用句点重写URL

时间:2011-02-21 19:46:44

标签: iis url-rewriting asp.net-2.0 isapi

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

但是,当“子文件夹”的最后一个字符是句点时,这似乎不起作用。例如,我的网址为/brakes/A.B.S./,并且不会触发映射。所以我最终得到404这样的URL。有谁知道我应该如何设置映射来触发这个? (我已尝试*。但这也无效。)

4 个答案:

答案 0 :(得分:7)

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

<httpRuntime relaxedUrlToFileSystemMapping="true" />

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

答案 1 :(得分:0)

正如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可能更容易

答案 2 :(得分:0)

我正在使用Web API属性路由

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

确保Web API获得第一个破解,不仅需要

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

你还需要

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"></modules>
</system.webServer>

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

ALLOW A DOT IN ASP.NET MVC APPLICATION (SPECIFICALLY IIS 7+)

答案 3 :(得分:0)

在我的情况下,我无法使用URL Rewrite,而另一个原因是URL Scan。

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