ASP.net实现无扩展名的URL重写(无需ISAPI)

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),不能传递参数的重写几乎没有什么意义。

时间: 2024-10-24 18:46:13

ASP.net实现无扩展名的URL重写(无需ISAPI)的相关文章

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

  URL重写已经有很多的方法,但是多数都有一个缺点,就是不支持无扩展名的网页.比如把http://www.aaa.com/jyk 转换为 http://www.aaa.com/topic.aspx?id=jyk. 微软提供的方法需要在根目录里面建立jyk的文件夹,然后再建立一个default.aspx的文件,如果您有100名会员的话,这是一个不可想象的事情. 另一个方法就是使用ISAPI过滤器,但是这个一般需要在服务器上安装一个DLL文件,自己没有服务器就不好办了. 下面提供一个可以说是我发明

无后缀访问-如何使url无扩展名也能访问?

问题描述 如何使url无扩展名也能访问? 在访问网站时,如何做到不需要扩展名也能访问呢? 比如http://msdn.microsoft.com/zh-cn/library/ms228090(v=vs.100).aspxhttp://msdn.microsoft.com/zh-cn/library/ms228090(v=vs.100) 都可以访问,像这样的怎么做到的? 更进一步是假设localhost/stat/se.aspx?verb=li 可以localhost/stat/se?verb=l

asp.net修改网页扩展名

asp.net默认扩展名为.aspx,可是我们看到许多网站的扩展名很特别比如微软的.mspx,下面讲解如何将网页扩展名改为mspx. ASP.NET 1.1中的方法: 1.IIS映射(IIS->默认网站->属性->主文档->配置->映射->添加): 扩展名.mspx ----> C:"WINNT"Microsoft.NET"Framework"v1.1.4322"aspnet_isapi.dll 限于:GET,HE

asp.net2.0使用正规表达式建立URL重写

asp.net A new feature in Asp.Net 2.0 is it's built-in url rewriting support. When i looked into this new feature i found out it lacked regular expressions support, wich is really the point of an Url Mapper. ScottGlu at his blog, explains the reason w

url重写IIRF(Ionic's Isapi Rewrite Filter)手册第1/2页_win服务器

说明 IIRF与ISAPI_Rewrite的规划区别只在于IIRF不需要使用转义字符\,而ISAPI_Rewrite则需要使用转义字符\. 介绍  IIRF是一款开源的重写URL过滤器,类似于Apache的URL重写,基于VC8.0(可以用Visual Studio2005或Visual C++ 2005 Express重新编译)开发.它可以运行在IIS5.0+,支持ASP,ASP.NET,PHP等许多格式.相对比ASP.NET2.0自带的URL重写,具有更好的性能和许多我们所需要特性,重要的一

另类扩展名同样执行ASP

执行 如想实现 http://www.knowsky.com/hello.zw  同样用ASP的语法来执行,我们还需要一些额外的工作. 为了让对后缀名为.zw的文件的请求能够被我们的Handler截获运行 打开IIS的管理控制台,又键单击站点,选择"属性",跳出站点的属性对话框.选择主目录选项,配置. 添加映射>>可执行文件里可以复制.asp里的C:\WINDOWS\system32\inetsrv\asp.dll路径. 扩展名为.zw 之后重启IIS,就可以以这种扩展名访

php从给定url获取文件扩展名的方法_php技巧

本文实例讲述了php从给定url获取文件扩展名的方法.分享给大家供大家参考.具体实现方法如下: <?php /** * 给定url,获取文件后缀 * @param string $url * @return string */ function getUrlPostfix ($url) { $url_arr = explode('.', $url); $postfix = $url_arr[count($url_arr) - 1]; $substr = substr($postfix, 0, 3

在 ASP.NET 中执行 URL 重写

asp.net|执行 Scott Mitchell 4GuysFromRolla.com 适用范围: Microsoft ASP.NET 摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重写.URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.讨论实现 URL 重写的各种技术,并介绍执行 URL 重写的一些实际情况. 下载本文的源代码. 本页内容 引言 URL 重写的常见用法 请求到达 IIS 时将会发生什么情况 实现 URL 重写 构建 UR

Asp.Net URL重写的具体实现

 这篇文章主要介绍了Asp.Net URL重写的具体实现,有需要的朋友可以参考一下 说到不用设置iis,主要是为了实现在虚拟主机或是拿不到iis操作限的时候,不能添加isap又想实现类似于静态化的程序实现方式,先声明,这里最终要实现的效果是,最终可以用   12345.html   替换   show.aspx?id=12345这样的地址访问   也可以实现百度空间的   http://hi.jb51.net/wu1987116   替换   http://hi.jb51.net/index.a