IIS URL重写:如何在提供多个文件时可靠地保留相对路径?

时间:2010-05-25 23:09:06

标签: c# iis-7 url-rewriting url-routing asp.net

我的WebApp是CMS的一部分,当我向用户提供HTML页面时,它通常包含 a.href img.src 属性。

我目前通过以下网址访问它们:〜/ get-data.aspx / 实例 /user/page.html - 其中 instance 表示报告的特定实例,“user / page.html”是由生成内容的外部应用程序创建的路径。

这非常可靠地使用应用程序的 BeginRequest 方法中的代码,该方法将“.aspx”之后的文本转换为查询字符串,然后使用 Context.RewritePath()

到目前为止一切都那么好,但我只是绊倒了令我惊讶的事情:看来如果有任何查询字符串(“ instance /user/page.html “)恰好包含加号(”+“),永远不会调用 BeginRequest 方法,并立即将404返回给用户。

所以我的问题是双重的:

  1. 我相信我认为“+”会导致404,如果有的话会有其他可能导致类似问题的事情吗?有没有解决这个问题的方法(也许是与 BeginRequest 不同的方法)?

  2. 是否有更好的方法来保留生成内容的相对URL路径,而不是我正在使用的内容?如果我能提供帮助,我宁愿不要求网站管理员安装第三方重写工具。

1 个答案:

答案 0 :(得分:0)

是的,这是IIS安全设置。你可以把它放在你的网络配置中来解决它。

<system.webServer>
<security>
    <requestFiltering allowDoubleEscaping="True"/>
</security>
</system.webServer>

然而,你必须要小心你在做什么。启用双重转义后,它将允许转义的URL本身包含转义字符,可用于利用您的网址重写将转义的字符传递到您的查询字符串,以构建与您想要的不同的查询字符串。