【问题标题】:IIS7: URL Rewriting with periodIIS7:带句点的 URL 重写
【发布时间】:2011-07-01 12:39:23
【问题描述】:

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

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

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/429963/… “找不到资源。” url末尾有“点”时出错
  • 最终,他遇到了同样的根本问题,但他用不同的关键字描述了他的症状,所以我从未见过这个问题。他也在使用 MVC,我没有,也没有指定他的 IIS 版本。希望这两个问题都能帮助人们在未来找到相同问题的答案。

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


【解决方案1】:

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

<httpRuntime relaxedUrlToFileSystemMapping="true" />

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

【讨论】:

  • 对不起...我应该更清楚。我正在运行 .Net 2.0,而 RelaxUrlToFileSystemMapping 仅从 4.0 开始可用。你对 2.0 有什么了解吗?
  • 我认为这在 .NET 2 上是不可能的。如果你真的需要这个功能,你是否考虑过迁移到 .NET 4?
  • 是的,我在阅读了有关 RelaxUrlToFileSystemMapping 属性的更多信息后得出了同样的结论。我不得不调整我的 IIS 配置和 web.config 中的一些其他项目,但我能够迁移到 4.0。谢谢。
【解决方案2】:

正如 Matthew 已经指出的,这在 .NET 4.0 中是可以解决的,但在 .NET 2.0 中是无法解决的。问题在于底层系统:微软禁止名称以点(或空格,就此而言)结尾,因为 Windows Explorer 无法处理它们(然而,底层 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 可能更容易

【讨论】:

    【解决方案3】:

    我正在使用 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+)

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 2012-01-01
        • 2011-07-30
        • 2013-04-09
        • 1970-01-01
        • 2016-10-06
        • 2012-02-07
        • 1970-01-01
        相关资源
        最近更新 更多