12

我正在使用 ASP.NET C#。

如何实现类似于 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 重写的自定义 DLL。我尝试了很多样品,但还没有运气!

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

4

5 回答 5

12

所以正在使用ASP.NET MVC。您确实需要详细阅读 MVC URL 重写的工作原理,但要点是 URL 中的“问题”部分是控制器类的名称(大致对应于 URL 中的“显示详细信息”)和number 是该控制器上默认操作的 ID 参数(与 URL 中的参数“id”相同)。

于 2009-02-06T17:44:46.340 回答
3

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

<configuration>
   <system.web>
    <customErrors mode="On" defaultRedirect="error.html">
        <error statusCode="404" redirect="newHandler.aspx"/>
    </customErrors>       
   </system.web>
</configuration>
于 2009-02-06T18:30:47.603 回答
2

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

于 2009-02-06T17:45:25.120 回答
2

请解释URL中“358630”等值的含义

那是(大概)数据库中问题的 ID。在 MVC 模型中

 myurl.com/questions/358630

类似于

myurl.com/questions.aspx?id=358630

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

于 2009-02-06T18:53:38.523 回答
1

新的 System.Web.Routing dll 是 ASP.NET 3.5 SP1 的一部分,可在 ASP.NET 3.5 上进行二进制部署,因此您可以在经典的 ASP.NET WebForms 站点上使用它的特性。

您可能需要注意 Phil Haack 在他关于在 IIS 6 上使用 MVC 的帖子中的评论,因为您可能需要在路由 url 中包含 .aspx 扩展名

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

您可能还想查看标记为 SEO 的问题

url 末尾被忽略的问题名称通常称为“Slug”,用于 SEO 目的以在 url 中包含页面标题。

于 2009-02-06T22:46:29.350 回答