路由- 404页面的解释



我的网站使用asp.net 4, c#和Routing。

My Route result like

A) http://mysite.com/article/58/mytitle   (result my article all is fine)

对于我的Articles表,58mytitle分别表示在数据库的IdTitle列中。

我注意到……如果我请求:
http://mysite.com/article/2000000000/mytitle (a not existing ID)

我收到一个错误页面

如果我尝试:

B) http://mysite.com/article/58/mytitttttttle (title misspelled)

我仍然得到我的页面http://mysite.com/article/58/mytitle

我需要有我的网站重定向到404页,如果两者的ID或标题不代表任何记录在我的数据源。

PS:我注意到SO网站有类似的行为,除了他们能够重定向到404页面,如果一个问题的ID不匹配。

我的问题:

  • 这是正常行为吗?
  • 如何重定向到404页?
  • 如果不能使用404页面会使用规范的url吗?
我问,因为我担心这种情况,让我们想象一个网站错误地链接到我的网站,如
http://mysite.com/article/58/mytitttttttle (title misspelled)

http://mysite.com/article/58/mytitttttttle2222 (title misspelled)

都将索引我的搜索引擎,并导致重复的内容(这是不好的)。

请提供我的代码样本,如果可能的话。谢谢你的评论,谢谢!

发生这种情况的原因是因为它使用数字id作为搜索键(在本例中,无论如何它都会查找post 58)。

你可以做的是

  • 去掉数字id,只使用文本OR
  • 检索帖子,并根据从数据库中提取的内容验证"postslug"是否正确。

通过只使用文本,你得到一个更干净的url。然而,你必须依靠你的数据库索引你的字符串,以便有高性能的查询你的postslug。而且你还得担心重复的鼻涕虫。

通过使用混合,你有更少的干净的url(额外的信息),但你不需要担心太多的整数查找性能。

无论选择哪个选项,都要在控制器中验证此信息,然后返回View,或者返回HttpNotFound()

你好,我最近做了这件事,并使用了这个帮助很大的博客

http://weblogs.asp.net/paxer/archive/2010/05/31/asp -网- http - 404和- seo.aspx

http://searchengineland.com/url重写-自定义错误页面- - aspnet 20 - 12234

与其传递ID和Title,我建议将Title保存为数据库中的唯一值,这样您就可以有:

http://mysite.com/article/title

如果有两个标题会怎样?那么,你可以创建一个循环,直到你找到一个唯一的循环,在末尾递增一个整数,比如:

http://mysite.com/article/title-2

这就解决了一个问题,即它们有无限多个可能的url都指向同一个页面(这会让谷歌讨厌你)


或者,如果你想保持你的URL与ID和标题在适当的地方,然后在你的web表单运行一个if语句返回多少记录在数据库中匹配的变量。

类似:

cmd.CommandText = "SELECT COUNT(*) FROM Table WHERE ID=@ID AND Title=@Title"
if ((int)cmd.executescalar == 0){
   Response.Redirect("404.aspx");
}

最新更新