【发布时间】:2009-12-30 09:44:38
【问题描述】:
谁能建议我为 ASP.NET 3.5 Web 应用程序重写 URL 的最佳技术?
谢谢
【问题讨论】:
标签: asp.net url-rewriting
谁能建议我为 ASP.NET 3.5 Web 应用程序重写 URL 的最佳技术?
谢谢
【问题讨论】:
标签: asp.net url-rewriting
如果您将 IIS 7 用于 ASP.NET 应用程序,您可能需要下载:
如果您使用的是 IIS 6 或 IIS 5,您可能需要考虑使用以下开源组件:
【讨论】:
使用哪个网络服务器?
如果是 Apache HTTP 服务器,那么mod_rewrite 可能是您最好的选择。
Wikipedia article 可能总结得最好,涵盖了主要的 Web 服务器和 Web 框架。
还有URL Rewriter And Reverse Proxy 选项,它是 IIS 6 和 IIS 7 的 mod_rewrite 克隆,可与 ASP.NET 配合使用。
【讨论】:
如果您使用的是 ASP.NET 3.5 SP1,请改用 ASP.NET UrlRouting。查看来自Chris Cavanagh 的这篇精彩文章或来自Phil Haack 的这篇文章。
【讨论】:
Daniel Vassallo 是正确的,您需要使用 UrlRewritingNet.UrlRewrite 来完成这项工作。
但是,我现在要警告您,大多数主机(根据我的经验)没有正确设置来处理 URL 重写。
如果您发现您收到 404 错误,那么您的 URLRewrite 设置在 web.config 中是错误的,或者他们在 IIS 中检查了“验证文件是否存在”。如果您要求,大多数主机都会为您更改此设置。
http://forums.asp.net/p/890825/1017645.aspx
http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/
【讨论】:
最简单的解决方案是通过同一个脚本文件(即到 index.php)传递所有请求,然后用脚本代码解析 URL。如何执行此操作取决于您的平台。
【讨论】:
如果您不具备将 URL 重写插件/模块安装到您的网络服务器的知识或能力,或者只需要简单的重写。
下面是我在 IIS 6 中进行的 URL 重写的精简版本。
这是一个非常基本的 URL 重写版本,您可以将其放入您网站根目录的 Global.asax 或 Global.asax.cs 文件中。
当用户看到 / Store/Categories/ 在他们的 URL 中,您的应用程序将 URL 视为 /Default.aspx?action=categories 和 Request["action"].ToString() 将具有“类别”的值
void Application_BeginRequest(object sender, EventArgs e)
{
string fullOriginalpath = Request.Url.ToString().ToLower();
if (fullOriginalpath.Contains("/store/categories/"))
{
Context.RewritePath("/Store/Default.aspx?action=categories");
}
else if (fullOriginalpath.Contains("/store/products/"))
{
Context.RewritePath("/Store/Default.aspx?action=products");
}
}
【讨论】: