我有一个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错误? (我知道如何以编程方式执行此操作,但如果可能,我更愿意使用配置文件。)
答案 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/blog
是www.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模块非常好。