ASP.NET URL 重写
Posted
技术标签:
【中文标题】ASP.NET URL 重写【英文标题】:ASP.NET URL Rewriting 【发布时间】:2010-09-05 08:39:04 【问题描述】:如何在 ASP.NET 中重写 URL?
我希望用户能够访问
http://www.website.com/users/smith
而不是
http://www.website.com/?user=smith
【问题讨论】:
Scott Guthrie 非常广泛地介绍了如何在 .Net 中以本地方式执行此操作 here。我使用了 httpmodule 方法并且效果很好。这基本上就是 ManagedFusion 为您做的事情。 关于分步说明,请点击以下链接:challadotnetfaq.blogspot.com/2011/08/… 【参考方案1】:尝试托管 Fusion Url 重写器和反向代理:
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*) 这样website.com/?users=smith&day=monday 不会产生website.com/users/smith&day=monday 这是一个好主意,并且在这个 .NET 版本中完全受支持。最初的意图是让我的示例与不支持该语法的 mod_rewrite 兼容。【参考方案2】:微软现在为 IIS 提供官方 URL 重写模块:http://www.iis.net/download/urlrewrite
它支持大多数类型的重写,包括设置服务器变量和通配符。
它也将存在于所有开箱即用的 Azure Web 实例中。
【讨论】:
这看起来很有趣。你知道它是否可以在 IIS6 上运行以及它位于网络堆栈的哪个级别? 这只是一个 IIS7 及更高版本的解决方案(它是一个模块 learn.iis.net/page.aspx/121/iis-7-modules-overview),对于 IIS6,您需要 www.isapirewrite.com 或 www.urlrewriter.net,isapi rewrite 似乎是一个稳定的商业产品对于 iis6【参考方案3】:我使用 httpmodule 从 www.urlrewriting.net 重写 url 并取得了巨大成功(尽管我相信一个更早、更简单的版本)
如果您的实际重写规则很少,那么 .NET 2.0 中内置的 url 映射可能是一个更简单的选择,网上有一些关于这些的文章,4guysfromrolla 似乎相当详尽,但你可以看到它们不支持正则表达式映射,因此在动态环境中呈现相当无用(假设您的示例中的“smith”不是特殊情况,那么这些将没有用)
【讨论】:
以上是关于ASP.NET URL 重写的主要内容,如果未能解决你的问题,请参考以下文章