ASP.NET URL重写

36

我该如何在ASP.NET中重写URL?

我希望用户能够访问以下URL:

http://www.website.com/users/smith

取代

http://www.website.com/?user=smith

Scott Guthrie在这里非常详细地介绍了如何在.Net中本地实现此操作:http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx。我使用了httpmodule方法,效果很好。这基本上就是ManagedFusion为您所做的。 - brendan
要逐步解释,请点击下面的链接:http://challadotnetfaq.blogspot.com/2011/08/url-rewritting-in-aspnet.html - user876586
3个回答

25

试用Managed Fusion Url Rewriter和Reverse Proxy:

http://urlrewriter.codeplex.com

重写规则如下:

# clean up old rules and forward to new URL
RewriteRule ^/?user=(.*)  /users/$1 [NC,R=301]

# rewrite the rule internally
RewriteRule ^/users/(.*)  /?user=$1 [NC,L]

一个建议:我会将第一个RewriteRule调整为^ /?users =(\ w *),这样http://www.website.com/?users=smith&day=monday就不会产生http://www.website.com/users/smith&day=monday。 - Dscoduc
这是一个好主意,并且在这个.NET版本中完全支持。最初的目的是使我的示例与mod_rewrite兼容,而该语法不支持它。 - Nick Berardi

5

Microsoft现在为IIS提供官方URL重写模块:http://www.iis.net/download/urlrewrite

它支持大多数类型的重写,包括设置服务器变量和通配符。

它也将默认存在于所有Azure Web实例中。


这看起来很有趣。你知道它是否能在IIS6上运行,以及它在网络堆栈中的哪个层级吗? - GateKiller
这只是适用于IIS7及以上版本的解决方案(它是一个模块http://learn.iis.net/page.aspx/121/iis-7-modules-overview/),对于IIS6,您将需要www.isapirewrite.com或www.urlrewriter.net,isapi rewrite似乎是稳定的商业产品,适用于iis6。 - Sam Saffron

4

我曾经使用过一个httpmodule进行url重写,来源于www.urlrewriting.net,取得了很大的成功(尽管我相信这只是早期版本)

如果您只有非常少量的重写规则,那么内置在.NET 2.0中的url映射可能是一种更简单的选择。网络上有一些关于此方面的说明文档,其中4guysfromrolla所提供的似乎比较全面,但正如您所看到的,它们不支持正则表达式映射,在动态环境下几乎无用(假设您的示例中的“smith”不是特例,那么这些就没有任何用处)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接