周六,花了1个来小时,Ylog增加一项新功能:URL重写,朝SEO优化又迈进了一步
众所周知,搜索引擎在处理网络信息时,静态URL的优先权重是高于动态(通过URL参数变量区别页面内容)的,因此SEO优化,最优先解决的问题,就是进行网站内容静态化或者通过URL Rewrite等方式来实现伪静态化。
在asp.net或者php等技术框架下实现方式都比较简单。这里就不详述了,由于丫用的这个Blog完全DIY,功能较为单一,也未使用HttpHandler或HttpModule等技术或url-rewrite等开源组件。
标注几点实现思路:
下述两个URL功能实现一致:
http://knay.net/article/Google-Leave-Mainland-China.aspx
http://knay.net/article.aspx?ArticleID=11991、将Blog系统的全量ArticleID - VirtualURL (纯英文,唯一)对应关系表加载入Cache;
2、定制独立的虚拟路径目录名,如 /article/;
3、Global.asax中Applicaiton_BeginRequest() 事件中,对所有aspx资源请求进行分析,若匹配到/article/,则获取页面名称(如:Google-Leave-Mainland-China)
4、通过ArticleID - VirtualURL缓存,寻找对应ArticleID,确定真是页面URL(article.aspx?ArticleID=1199);
5、页面重写URL: Context.RewritePath("article.aspx?ArticleID=1199");
值得注意的是,在处理目录URL或无扩展名页面资源重写时,由于默认情况下,IIS是将网站目录访问请求提交给ISAPI筛选器,因此在我们在访问类似 http://www.exsample.com/tag/abc 这样的连接时,我们将无法在Global.asax中截取到该请求,因此无法在Global.asax中进行URL重写,因此通常我们会得到404资源不存在的错误提示。
那么,如何通过asp.net页面在Global.asax中执行类似目录访问或者无扩展名页面URL重写,而不会出现404错误呢?
如果你有该服务IIS配置权限的话,可以通过扩展ISAPI映射关系,添加网站所有资源访问托管(包括已经默认的aspx、ascx、config、asmx、rem、cs、vb等文件资源,当然,也应该包括目录访问情况),这样就可以在Global.asax中拦截到资源访问,从而实现URL重写。
通过添加ISAPI对“.*”扩展名的配置即可实现。具体操作由于超出了本次通过Global.asax进行URL重写的范围,就不详述了。后续有机会再讲讲如何在asp.net+IIS中实现无扩展名页面资源访问URL重写。
---EOF---
声明:本站遵循署名-非商业性使用-相同方式共享3.0共享协议. 转载请注明转自 Knay.Net ™