路由- 404页面的解释
本文关键字:解释 404页 路由 | 更新日期: 2023-09-27 18:09:33
我的网站使用asp.net 4, c#和Routing。
My Route result like
A) http://mysite.com/article/58/mytitle (result my article all is fine)
对于我的Articles
表,58
和mytitle
分别表示在数据库的Id
和Title
列中。
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");
}