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 重写的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 回发在 URL 重写中产生问题?

在 ASP.NET 中重写 URL?

ASP.NET URL伪静态重写实现方法

如何正确 URL 重写图像? C# ASP.NET

ASP NET Web 表单 URL 重写太慢

如何使用 url 重写将位置数据存储在我的 asp.net 站点上所有页面的 url 中?