Asp.net 在.aspx页面上提升404

Asp.net 在.aspx页面上提升404,asp.net,Asp.net,我有一个ASP.NET 4.0 web表单应用程序(IIS 7),其中我使用URL路由来允许友好的URL。例如,我不允许Blog.aspx?title=博客标题,而是允许Blog/博客标题 我的问题是:如何防止用户直接访问Blog.aspx?我已在我的web.config中包含以下设置: <httpHandlers> <add verb="*" path="*.aspx" type="System.Web.HttpForbiddenHandler" /> </h

我有一个ASP.NET 4.0 web表单应用程序(IIS 7),其中我使用URL路由来允许友好的URL。例如,我不允许
Blog.aspx?title=博客标题
,而是允许
Blog/博客标题

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

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

这是可行的,但它显示了一个“未提供此类型的页面”错误。是否可以使用IIS或web.config为所有.aspx页面请求显示404错误?(我知道如何通过编程实现这一点,但如果可能的话,我更愿意使用配置文件。)

用于将有问题的地址更改为您喜欢的地址。这是一篇介于这两种观点之间的文章

URL重写的SEO方面

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

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

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

重写是如何工作的

当您请求URL时,无论是针对
example.com/blog.aspx
还是
example.com/blog
,请求都会发送到web服务器。在那里,URL重写引擎计算请求头中的URL。如果URL与任何重写规则匹配(例如,删除
.aspx
扩展名),则web服务器将发出一个
301永久移动的
响应代码,并在响应头中添加新的URL

收到响应后,浏览器请求新的URL。搜索引擎机器人程序,如
googlebot
查看永久重定向代码,并将该链接的索引更改为请求的URL。因此,如果它索引了
example.com/blog.aspx
,或者有人链接到它,那么
301永久移动的
响应会告诉爬行器新的URL实际上是
example.com/blog
。因此,在蜘蛛的眼中,
example.com/blog.aspx
example.com/blog

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

URL重写也是使用
www.stackoverflow.com
访问网站的方式,以本网站为例,并让浏览器实际显示
stackoverflow.com
(无
www
)。重写引擎告诉浏览器(和爬行器)对
www.stackflow.com
的引用实际上被称为
stackoverflow.com



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

我决定只实现一个自定义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="System.Web.HttpForbiddenHandler" />
</httpHandlers>
<httpHandlers>
  <add verb="*" path="*.aspx" type="PageNotFoundHttpHandler" />
</httpHandlers>

编辑:


根据saluce的答案提供301重定向是一个更优雅的解决方案。尽管URL重写/重定向更多地取决于特定的web服务器,在我的例子中,我使用的是IIS 7,URL重写模块非常好。

可能是*.asp。asp是一个真正的过滤器,可以将/the blog title as/the blog title/Default.aspxI拒绝对.aspx页面的所有请求,以防稀释我的SEO。感谢您的详细回复。请解释搜索引擎如何只看到重写的URL。例如,如果站点1通过链接到我的博客,而站点2通过链接到我的博客,尽管它们可能提供完全相同的内容,但搜索引擎对这两个请求的索引不是不同吗?这就是我想要阻止直接访问.aspx文件和只提供服务的友好URL的原因。啊,是的,你最初没有提到重定向。这与URL重写不同。:)谢谢你的回答!