2

我有一个 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 错误?(我知道如何以编程方式执行此操作,但如果可能,我更愿意使用配置文件。)

4

2 回答 2

3

使用URL 重写将有问题的地址更改为您喜欢的地址。这是一篇文章,解释了这两种想法之间的区别。

URL重写的SEO方面

URL 重写不会稀释 SEO;实际上,这就是您通过重写 URL 来建立规范 URL的方式。搜索引擎只能看到重写后的 URL,而不是用于请求的 URL。

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

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

重写是如何工作的

当您请求 URL 时,无论是 forexample.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响应会告诉蜘蛛新 URL 实际上是example.com/blog. 因此,在蜘蛛眼中,example.com/blog.aspxexample.com/blog

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

URL 重写也是访问站点的方式,以该站点为例,www.stackoverflow.com并让浏览器实际显示stackoverflow.com(没有www)。www.stackflow.com重写引擎告诉浏览器(和蜘蛛)实际调用了对的引用stackoverflow.com


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

于 2012-06-10T18:58:58.453 回答
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 模块非常好。

于 2012-06-10T23:32:24.663 回答