IIS URL 重写 40​​4 错误

IIS URL 重写 40​​4 错误

我在 Windows 7 和 IIS 上运行一个小型内部网站点,并且我有一个页面page/LoadPage.aspx,该页面是一个 ASPX 容器页面,用于显示请求的页面,例如http://localhost/page/LoadPage.aspx?p=downloads(加载downloads.html位于根目录中)。

问题是,当使用 IIS 7 中的 URL Rewrite 插件创建用户友好 URL 时,如果查询标记(p)请求特定目录中的页面(例如http://localhost/page/LoadPage.aspx?p=downloads/software,应该加载该页面downloads/software.html),则会引发 404 错误,因为服务器认为用户已请求目录。

映射和重定向适用于类似 的单个请求,page/LoadPage.aspx?p=downloads该请求成功重定向到http://localhost/downloads.html

谢谢。

更新:这是代码。这可能是问题所在吗?

示例 URL:(/page/LoadPage.aspx?p=downloads此 URL 有效并重定向至downloads.html

示例 URL:(/page/LoadPage.aspx?p=downloads/software这不起作用,但旨在重定向至/downloads/software.html

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim p = Request.QueryString("p").ToString
        Dim page = HttpUtility.UrlDecode(p)
        Dim ReadHTML As New IO.StreamReader("\\PC\User\Documents\IIS Websites\Intranet\" & page & ".html")
        container.InnerHtml = ReadHTML.ReadToEnd
    End Sub

答案1

/是保留字符,因此您需要对查询字符串值进行 url 编码。

您的 URL 应如下所示:

http://localhost/page/LoadPage.aspx?p=downloads%2Fsoftware

要在 .NET 代码中使用该值,您需要对该值进行解码:

HttpUtility.UrlDecode(value);

https://msdn.microsoft.com/en-us/library/adwtk1fy.aspx

答案2

我解决了这个问题。看来 IIS 不喜欢/在查询中,除非它是双倍的像这样转义%252f。但是,它不会用斜线替换它,因此 URL 最终看起来很乱。我通过使用下划线作为斜线符号来避免这个问题:/page/LoadPage.aspx?downloads_software然后它在运行时用斜线替换冒号(不幸的是,更改在 URL 中不可见)。

相关内容