111111
精灵王
精灵王
  • 注册日期2010-12-08
  • 发帖数640
  • QQ
  • 火币1103枚
  • 粉丝120
  • 关注75
  • 社区明星
阅读:4960回复:0

asp.net实现无扩展名的url重写。简单、方便、无需isapi_asp.net技巧

楼主#
更多 发布于:2010-12-15 21:00
URL重写已有非常多的方法,不过多数都有一个缺点,就是不支持无扩展名的网页。比如把http://blog.knowsky.com/category_1_1.htm 转换为 http://blog.knowsky.com/category.aspx?id=1

微软提供的方法需要在根目录里面建立jyk的目录,然后再建立一个default.aspx的文件,如果你有100名会员的话,这是个不可想象的事情。
另一个方法就是使用ISAPI过滤器,不过这个一般需要在服务器上安装一个DLL文件,自己没有服务器就不好办了。
下面提供一个能说是我发明的一个方法??不知道以前有没有人想到过??利用两个特性来实现。
第一个:IIS里面的未找到文件的错误设置。
第二个:asp.net 里面的Server.Transfer("topic.aspx?id=jyk");
这两个结合起来就能达到我们的目的了。

思路:利用404b错误捕捉客户的请求,再使用Server.Transfer转向。

在我们访问http://www.aaa.com/jyk 的时候,假设这时服务器上没有jyk目录,那么会返回什么结果呢?会返回一个“无法找到该页”的页面,那么这个返回结果能不能自己控制一下呢?非常幸运IIS提供了这个功能,我们能把这样的错误指定到网站里的一个页面。

操作步骤:
第一步:打开IIS管理器,网站属性??自定义错误标签??404错误??点击修改??修改“消息类型”为“URL”,在下面的文本框里填写处理这个错误得页面名称,比如/none.aspx。

第二步:在我们的网站根目录下建立一个none.aspx的网页。在里面随意写点内容(测试用)。

设置完毕,这时再访问http://www.aaa.com/jyk,显示的就是 none.aspx的网页内容了。注意这时浏览器里面的URL地址仍然是http://www.aaa.com/jyk,而不是http://www.aaa.com/none.aspx 。这一点非常重要,如果地址变了,那就没有意义了。
那么我们怎么把页面转到我们希望的页面呢,这时所有的未找到文件的情况都会转到none.aspx文件,显然这不是我们想要的最终结果。那么我们怎么获取客户输入的网址呢?
打开none.aspx的后台文件,

string URL = Request.Url.Query;
 

我们能使用上面的语句来获取URL地址,得到的地址格式是:
?404http://www.aaa.com/jyk
其中 “?404”是固定的,过滤掉他就是浏览器里面的URL地址了。
剩下的事情就是根据情况来转换网页了。能拆串,再用switch来判断;也能用正则表达式来判断。因为我正则不熟,我采用的是switch的方式。正则表达式请参考其他的资料,我也在找,如果你找到了请共享一下,谢谢。
好处:
1、 支持无扩展名的网页。不用建立目录和文件。
2、 思路简单,用法也非常简单,代码也不复杂,不涉及高深的理论;
3、 支持搜索引擎,就是说能被各大搜索引擎搜录。
4、 能配合泛解析使用。
缺点:
1、 需要修改一下IIS 404b错误的处理方法;
2、 效率要略微低一点。
3、 如果你只使用.aspx的扩展名的话就能不用修改IIS了。
4、 Asp不支持。因为asp的Server.Transfer不能带参数(?id=jyk),不能传递参数的重写几乎没有什么意义。

喜欢0 评分0
游客

返回顶部