所以,我知道这里和互联网上有很多这个主题。但大多数文章/问题都是指“静态”网址重写,如:
www.site.com/products.aspx?category=Books
所以他们把它重写为
www.site.com/Products/Books
没关系,但我需要别的东西。
该网站就像一个CMS,它有不同类型的内容。
现在要阅读标题为“StackOverflow如何帮助您进行开发”的文章,您需要转到以下URL。
www.site.com/viewContent.aspx?Id=1234
我想要的是:
www.site.com/Content/Articles/how-to-stackoverflow-helps-you-in-your-development
据我了解,我需要参与ASP .NET,因为首先我需要检索文章(当然是它的标题),然后重写URL。
但我想知道如果我去那个网址,ASP .NET将如何知道如何获取该文章,它不包括任何地方的id ... 所以也许我可以接受像
这样的东西www.site.com/Content/Articles/1234/how-to-stackoverflow-helps-you-in-your-development
我有点迷失在这里..我从来没有做任何URL重写,我已经google了很多,我找不到办法做我想要的。也许我想要的不是叫url重写???我不知道......
该网站在Windows 2003 Server,IIS6,ASP .NET 3.5 SP1下运行 当然,我需要一个免费的解决方案,不能在ISAPI mod上花费100usd(除了我不知道这是否会做我需要的)。
感谢所有人,对不起,如果这是一个重复的问题,但我找不到它。
编辑:我不需要支持nonASP.NET文件(jpgs,gifs等)不需要重写。我只需要重写viewContent页面,将内容标题包含在URL中。
答案 0 :(得分:5)
您可以使用ASP.Net 3.5 sp1附带的新Routing来获得干净的网址。
这甚至可以在Web表单中完成,而不仅仅是MVC。 (我自己做过)。有关如何设置的详细信息,请参阅here和here。
您可以将文章的ID和标题放在URL中,并使Id成为用于搜索文章的真实参数。这就是SO所做的。尝试删除网址的问题,它会将您带到同一个地方。
即使您不使用Id,您也可以将文章的标题“如何在堆栈中帮助您 - 帮助您在开发中”传递给您的数据库,并根据标题检索文章。< / p>
关于IIS 6,它有点棘手,因为默认情况下IIS 6无法处理无扩展名的URL。
有一些解决方法:
答案 1 :(得分:2)
这个是免费的,我已经使用过了,效果很好:http://www.codeplex.com/IIRF
好处是它会处理没有扩展名的url(即.aspx,.html等)
答案 2 :(得分:1)
您可以使用ASP.NET路由实现此目的。您可以使用ASP.NET MVC以及Webforms执行此操作。不需要对IIS执行任何操作。
检查以下链接
http://www.4guysfromrolla.com/articles/051309-1.aspx#postadlink
我在1小时内通过上述链接的详细信息在我的网络应用程序中进行了URL路由。这很容易学习。它们也提供了示例代码。它将帮助您轻松完成
您可以使用title检索内容的ID。但标题应该是唯一的。当用户从文本框中取出鼠标时,您可以使用ajax检查标题是否已存在。
答案 3 :(得分:0)
最简单的方法是将http模块添加到当前的webforms项目中。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
这将向您展示它的基础知识,但它可以轻松扩展,以便您想要重写的页面取自数据库,甚至可以即时构建。
答案 4 :(得分:-1)
ASP.net MVC是你的朋友
stackoverflow使用MVC