在IIS7上重写URL

时间:2011-11-18 14:11:40

标签: .net url iis url-rewriting

我试图通过在IIS上使用入站规则将URL重写为另一个URL。我想要做的基本上是localhost/Membership/Login之类的任何请求都是localhost/handlers/mapper.ashx?url=Membership/Login。我所做的是创建一个类似下面的模式

(Membership\/)(.+)

并且重写网址是

http://localhost/handlers/mapper.ashx?url={R:0}

实际上这种方式并没有给我解决方案。它继续作为普通请求工作而不是mapper.ashx。

可能是什么问题?做这样的事情的正确方法是什么?

提前致谢,

2 个答案:

答案 0 :(得分:2)

正如达拉斯已经指出的那样,除了你自己的解决方案建议之外,你还要求其他东西。但我会给你两种选择。首先,如果您只需要将URL的login部分作为处理程序的methodname参数,则可以使用以下重写规则:

<rule name="Rewrite to handler" stopProcessing="true">
    <match url="^Membership/(.+)" />
    <action type="Rewrite" url="/handlers/mapper.ashx?methodname={UrlEncode:{R:1}}" appendQueryString="false" />
</rule>

如果您需要url参数中的完整网址作为您自己的解决方案建议,那么您可以使用以下重写规则:

<rule name="Rewrite to handler" stopProcessing="true">
    <match url="^Membership/(.+)" />
    <action type="Rewrite" url="/handlers/mapper.ashx?url={UrlEncode:{R:0}}" appendQueryString="false" />
</rule>

答案 1 :(得分:0)

这并不能解释为什么您的映射被跳过但您的示例和实际实现不同。你说你想要映射到

的请求

本地主机/处理程序/ mapper.ashx?的方法名 =登录

但您重写网址的示例是

http://localhost/handlers/mapper.ashx网址 = {R:0}?

你的重写网址中有url,而不是methodname