【问题标题】:What is IIS 6.0 doing with slashes after the page name in a URL?IIS 6.0 在 URL 中的页面名称后使用斜杠做什么?
【发布时间】:2011-01-17 16:19:12
【问题描述】:

有一个客户的问题让我很困惑。

他们使用的是 IIS 6.0,出于某种原因,他们没有在他们的服务器上发出正常的页面请求,我将其称为 www.domain.com/Default.aspx 有人键入 www.domain.com/Default.aspx /随机的东西

似乎 IIS 的响应是正常服务 Default.aspx,但就浏览器而言,路径是 www.domain.com/Default.aspx/ 而不是 www.domain.com/,因此CSS、图像等的所有相对路径都失败

我查看了 Fiddler 中的流量,似乎所有这些图像等请求,例如 www.domain.com/Default.aspx/images/image.gif 也在返回 Default.aspx 的内容,不用说,不是有效的图像!

我不相信他们在 URL 重写方面做了什么特别的事情,但为了确定,我在一个新创建的 ASP.NET Web 应用程序上尝试了一个实验,结果是一样的。

那么是什么导致 IIS 将 /Default.aspx/randomstuff 之类的 URL 作为对 Default.aspx 的请求传递给 ASP.NET 管道?是否可以将其停止并按照您的预期抛出 404?

【问题讨论】:

    标签: asp.net url iis-6


    【解决方案1】:

    这称为PathInfo 组件。

    你可以这样停下来:

    if (!String.IsNullOrEmpty(Request.PathInfo)) throw new HttpException(404);
    

    【讨论】:

    • 另见 MSDN 文章底部有关 IIS 中“检查文件是否存在”的评论。
    • 似乎最好的重载是HttpException(404, "Not found")。此外,在我的场景中,最好Response.StatusCode = 404; Response.End(); 而不是抛出HttpException
    【解决方案2】:

    是的,这很正常。 Apache 也会这样做。

    您可以将其用于路由,因此您可以使用 URL /script.name/random/stuff 而不是 /script.name?page=random&section=stuff,而无需设置 URL 重写。

    浏览器自然不知道script.name 是真正的脚本,randomstuff 并不是服务器端路径的一部分。因此,所有 URL 都将相对于 random 目录。通常,当您使用路由编写应用程序时,您必须确保使用根 URL 或绝对 URL,而不是相对 URL,因此。

    它是否可以停止,并按照您的预期抛出 404?

    是的,就像 SLaks 的回答一样。但是,最好将 301 发送到没有尾随路径信息部分的真实地址。

    【讨论】:

      猜你喜欢
      • 2021-06-29
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多