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