在.aspx页面上提高404

时间:2012-06-10 18:47:00

标签: asp.net

我有一个ASP.NET 4.0 Web表单应用程序(IIS 7),我使用URL路由来允许友好的URL。例如,我允许Blog.aspx?title=the-blog-title而不是Blog/the-blog-title

我的问题是:如何阻止用户直接访问Blog.aspx?我在web.config中包含了以下设置:

<httpHandlers>
  <add verb="*" path="*.aspx" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>

这样可行,但它显示“此类页面未提供”错误。是否可以使用IIS或web.config简单地为所有.aspx页面请求显示404错误? (我知道如何以编程方式执行此操作,但如果可能,我更愿意使用配置文件。)

2 个答案:

答案 0 :(得分:3)

使用URL Rewriting将违规地址更改为您喜欢的地址。这是两个想法之间的文章explaining the difference

网址重写的SEO方面

URL重写不会稀释SEO;事实上,这就是你通过重写URL建立canonical URLs的方式。搜索引擎只能看到重写的URL,而不是用于请求的URL。

例如,如果您有以下网址都指向您的主页:

然后,您可以重写网址,以便任何请求上述任何网址的人都会获得网址http://www.example.com/。无论最初如何访问该页面,该URL都是搜索引擎可以看到的唯一URL。

重写如何运作

当您请求URL时,无论是example.com/blog.aspx还是example.com/blog,请求都会发送到Web服务器。在那里,URL重写引擎评估请求标头中的URL。如果URL匹配任何重写规则(例如,要删除.aspx扩展名),则Web服务器会发出301 Permanently Moved响应代码,并在响应标头中显示新URL。

收到回复后,浏览器会请求新的URL。像googlebot这样的搜索引擎机器人会看到永久重定向代码,并将该链接的索引更改为请求的URL。因此,如果它已将example.com/blog.aspx编入索引,或者有人链接到301 Permanently Moved,那么example.com/blog响应会告诉蜘蛛新网址实际上是example.com/blog.aspx。因此,在蜘蛛的眼中,example.com/blogwww.stackoverflow.com

这是人们在不丢失PageRank的情况下移动网站和页面的方式,因为重写引擎将蜘蛛指向新页面,因此新页面名称与旧页面名称保持相同的PageRank。

网址重写也是访问网站的方式,以此网站为例stackoverflow.com并让浏览器实际显示www(不包含www.stackflow.com)。重写引擎告诉浏览器(和蜘蛛)对stackoverflow.com的引用实际上被称为non-www


虽然您已经找到了一个令您满意的解决方案,但我强烈建议您花一些时间查看URL重写,因为它比发送错误消息更优雅,更专业。它还允许您将所有www个请求重定向到{{1}}网址,进一步防止稀释您的SEO排名。

答案 1 :(得分:0)

我决定只实现一个自定义HTTP处理程序并返回404。

public class PageNotFoundHttpHandler : IHttpHandler
{
    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.StatusCode = 404;

        context.ApplicationInstance.CompleteRequest();
    }
}

在web.config中:

<httpHandlers>
  <add verb="*" path="*.aspx" type="PageNotFoundHttpHandler" />
</httpHandlers>

编辑:

每个saluce的答案提供301重定向是一个更优雅的解决方案。虽然URL重写/重定向更多地依赖于特定的Web服务器,但在我的情况下,我使用的是IIS 7,并且URL Rewrite模块非常好。