我假设您使用的是 IIS 7.x 并且您已经安装了URL Rewrite 2.0 模块。
在应用程序的web.config文件中,添加<rewrite>
类似于以下内容的元素:
<system.webServer>
<rewrite>
<rules>
<rule name="PDF Rewrite">
<match url="Content/PDF/([\w-]+)\.pdf" />
<action type="Rewrite" url="User/GetPdf/{R:1}" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
的([\w-]+)
部分url="Content/PDF/([\w-]+)**\.pdf"
将“捕获”没有文件扩展名的 PDF 的名称(在您的示例中为“ ABC ”)。的{R:1}
部分<action type="Rewrite" url="User/GetPdf/{R:1}" logRewrittenUrl="true" />
然后将插入捕获的字符串。最终结果是:
http://localhost:9000/Content/PDF/ABC.pdf
变成:
http://localhost:9000/User/GetPDF/ABC
我假设您需要将 PDF 的名称传递给您的 Action 方法,因此如果您实现标准路由模式{Controller}/{Action}/{id}
,那么id
将设置为“ ABC ”。
我发现的对 URL Rewrite 模块的最佳介绍实际上是URL Rewrite 1.1 配置参考。尽管它适用于 v.1.1 而不是 2.0,但它提供了比v.2.0 配置参考更好的概述。从一开始就值得一读。特别是,必须理解“<em>从重写规则访问 URL 部分”部分。
要调试 URL 重写模块,您可以使用 IIS 7.x“失败请求跟踪”,与其名称相反,它可用于跟踪成功和失败的请求。这个www.iis.net 条目说明了如何配置它以及可用的详细调试信息的数量。
另请注意,该logRewrittenUrl="true"
属性意味着重写的 URL 将记录到标准 IIS 日志而不是原始 URL。(它不能用于记录原始 URL 和重写 URL --- 你只能获取其中一个。)