2009-02-06 77 views
12

我正在使用ASP.NET C#。在ASP.NET中重写URL?

如何实现类似于StackOverflow.com的URL重写过程?

http://stackoverflow.com/questions/358630/how-to-search-date-in-sql 

此外,URL中的“358630”等值的含义是什么?这是问题ID(它们用于从表中获取数据的基础)?无论如何,在我的应用程序中,我使用“ID”字段来识别记录。该字段是SQL表中的标识列。现在,我的网址是这样的:

http://myweb.com/showdetails.aspx?id=9872 

但我希望他们看起来像:

http://myweb.com/showdetails/9872/my_question_title 

或者:

http://myweb.com/9872/my_question_title 

或任何最好的方式,这会尝到很好的搜索机器人。

我的应用程序托管在Go Daddy的共享托管服务上,我觉得自己的服务器上没有自定义的ASP.NET“HTTP模块”或没有自定义的URL用于URL重写。我尝试了很多样品,但没有运气!

我发现Stack Overflow托管在Go Daddy(共享托管?)上。也许Stack Overflow的方法适用于我。

+0

不知道为什么这是倒投了。对我来说这似乎是一个合法的问题。 – 2009-02-06 17:44:33

+0

是的,这是一个完全合法的问题。由downvoters驱动的 – BobbyShaftoe 2009-02-06 17:45:48

+0

。啧。他们没有球说为什么。 – Will 2009-02-06 17:46:23

回答

12

SO正在使用ASP.NET MVC。您确实需要详细阅读MVC URL重写的工作原理,但其要点是URL中的'questions'部分是Controller类的名称(大致对应于URL中的'showdetails')和number是该Controller默认操作的ID参数(与URL中的参数'id'相同)。

2

在System.Web.Routing出现之前,通常的做法是使用UrlRewriter.NET。工作得不错,但在配置IIS时会咬你。我不确定在ASP.NET中是否有任何使用新的Routing类的简单方法(即,将它放入并转到重构代码)。

3

由于MVC不是您可以尝试重定向404的选项。这将在ASP.NET 1.1及更高版本中工作:使用IIS配置或web.config将404s和405s重定向到您自己的处理程序,解析处理程序中的请求并重定向到适当的资源。

<configuration> 
    <system.web> 
    <customErrors mode="On" defaultRedirect="error.html"> 
     <error statusCode="404" redirect="newHandler.aspx"/> 
    </customErrors>  
    </system.web> 
</configuration>
2

请解释值的含义 如在URL

即(大概)的数据库中的问题ID “358630”。在MVC模式

myurl.com/questions/358630 

类似于

myurl.com/questions.aspx?id=358630 

在URL末尾的问题的标题实际上是由应用程序忽略。它通常会被用于搜索引擎优化和人类可读性目的。事实上,您可以在URL中更改此问题的标题,并注意页面仍然正常加载。

1

新的System.Web.Routing DLL是ASP.NET 3.5 SP1的一部分,并且是bin deployable on ASP.NET 3.5,因此您可以使用a classic ASP.NET WebForms site上的功能。

你可能会想要注意到菲尔哈克的评论在他post on using MVC on IIS 6因为你可能需要在你的路由的URL在.aspx扩展

http://www.mysite.com/controler.aspx/action/id 

你可能也想看看Questions Tagged SEO

网址末尾忽略的问题名称通常被称为“Slug”,用于搜索引擎优化的目的是在网址中包含页面标题。