ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI。

转载 2007年09月24日 09:16:00

URL重写已经有很多的方法,但是多数都有一个缺点,就是不支持无扩展名的网页。比如把http://www.aaa.com/jyk 转换为 http://www.aaa.com/topic.aspx?id=jyk

微软提供的方法需要在根目录里面建立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不支持。因为aspServer.Transfer不能带参数(?id=jyk),不能传递参数的重写几乎没有什么意义。

   

这种方法已经实践过了,效果很理想。www.1380000.com www.1370000.com 这两个网站就是使用的这种方法。 

ASP.NET 4.0在IIS6原生支持没有后缀名的URL请求

看到haack的这篇文章《ASP.NET MVC 3 Extensionless URLs on IIS 6》,我才知道在IIS6的环境下运行ASP.NET4.0程序,我们已经可以原生的支持没有后续名...
  • felixfeng
  • felixfeng
  • 2013年10月26日 12:32
  • 933

asp.net不用设置iis实现url重写 类似伪静态路由

程序要调整地部分只有两块. 一是web.config文件. 二是链接地址. 所需urlrewrite.dll 首先下载urlrewriter:http://download.microso...
  • shan1774965666
  • shan1774965666
  • 2015年04月04日 03:14
  • 710

Asp.Net实现URL重写,支持任意扩展名及无扩展名,多参数

实现的效果 最终可以用12345.html 替换 show.aspx?id=12345这样的地址访问 也可以实现百度空间的 http://hi.baidu.com/wu1987116 替换...
  • wenzhao911224
  • wenzhao911224
  • 2014年03月06日 10:22
  • 496

Url重写——伪静态实现

简述: 在我们浏览网站的时候,很多都是以.html结尾的。难道这些都是静态网页么?其实不是的,它们很多是伪静态 那么什么是伪静态?顾名思义,就是假的静态页面。通过某种设置让你看成是静态的。 Q:...
  • shuai7boy
  • shuai7boy
  • 2017年05月25日 15:05
  • 281

Asp.Net实现URL重写,支持任意扩展名及无扩展名,多参数

实现的效果 最终可以用12345.html 替换 show.aspx?id=12345这样的地址访问 也可以实现百度空间的 http://hi.baidu.com/wu1987116 替换...
  • jackiehome
  • jackiehome
  • 2013年02月20日 17:27
  • 4083

URL重写及ASP.NET路由、Http处理模块、程序等

这段时间在学习ASP.NET路由、HTTP处理等内容,了解了一些,但又未完全弄懂,似是而非,不管如何,作一总结,供日后借鉴和修改。一、IIS6和IIS7经典模式和集成模式在IIS6及IIS7经典模式下...
  • leftfist
  • leftfist
  • 2013年08月30日 19:39
  • 6689

Asp.net实现URL重写

【概述】URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。重写URL是非常有用的一个功能,因为它可以让你提高搜索引擎阅读和索引你的网站的能力;而且在你改变了自...
  • qq719365064
  • qq719365064
  • 2016年10月25日 17:51
  • 49

iis7中isapi的配置(URL重写)

Win7/Windows2003下IIS6.0、IIS7.5的伪静态组件安装和伪静态配置方法,还包括常用的伪静态规则使用方法。   1)下载IIS伪静态组件——ISAPI_Rewrite3完全破...
  • xbfengyu
  • xbfengyu
  • 2016年06月22日 09:02
  • 228

ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL

在初级篇中,我们介绍了如何利用基于ASP.NET MVC的Web程序中的Global文件来简单的重写路由。也介绍了它本身的局限性-依赖于路由信息中的键值对:   如果键值对中没有的值,我们无法将...
  • lwj0310
  • lwj0310
  • 2014年06月21日 14:38
  • 2269

asp.net 页面url重写

asp.net 页面url重写 不更改情况下,页面路径为index.aspx?id=1,现在输入页面路径index/1时,也能访问到页面,这一过程叫做url重写 ①:在一个类里制定路径重写规则...
  • LanSeTianKong12
  • LanSeTianKong12
  • 2017年04月14日 14:55
  • 629
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI。
举报原因:
原因补充:

(最多只允许输入30个字)