Home > 挨踢路 > ylog on the way(7) - URL Rewrite

ylog on the way(7) - URL Rewrite

周六,花了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=1199

 1、将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重写。

参考资料:Inside IIS and ASP.NET

 ---EOF---

Comments ( 0 )

Leave a comment



 refresh the code


start with "[antispam]" OR type some Chinese words.