我是一个数据库驱动的ASP.NET网站,使用单个APSX页面来显示所有网站页面。因此,网站的所有URL都采用以下格式:
/main.aspx?page=Page+Title+One
/main.aspx?page=Another+Article+Title
不幸的是,谷歌索引了许多不存在的URL,大多数情况下是截取了查询字符串的一部分。例如:
/main.aspx?page=Page+Title or /main.aspx?page=Page
而不是正确的:
/main.aspx?page=Page+Title+One (this is indexed by Google as well of course).
我想要实现的是,如果查询字符串页面名称在我的数据库中没有匹配项,则在服务器端强制显示404错误,这样可以提供更好的用户体验并告诉Google这些页面不存在。
以下是我的代码,但它并不起作用。我的意思是它在IE 8中只显示一个空页面,在最新的Firefox中则会出现错误:
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.StatusCode = 404;
System.Web.HttpContext.Current.Response.Status = "404 Not Found";
System.Web.HttpContext.Current.Response.End();
我在日志中看到了正确的404代码,但是我没有被重定向到我在web.config文件中指定的错误页面:
<customErrors mode="On">
<error statusCode="404" redirect="404.aspx"/>
</customErrors>
我做错了什么?
还有一件让我有些担心的事情是,如果我成功地强制在任何数据库中不存在匹配项的查询字符串条目上生成404错误,那么这不会有效地影响所有现有页面的main.aspx页面吗? 我的意思是:
我使main.aspx?page=Non-Existing-Title 产生404错误,然而我的404错误也会影响具有包括有效标题的任何查询字符串的main.aspx,例如main.aspx?page=Existing-Title。
该网站运行在IIS6/Win 2003上。
感谢您的帮助!
约翰