URL重写已经有很多的方法,但是多数都有一个缺点,就是不支持无扩展名的网页。微软提供的方法需要在根目录里面建立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),不能传递参数的重写几乎没有什么意义。
分享到:
相关推荐
本讲将通过实例比较ASP.NET下的三种典型URL重写方案——ISAPI重写(使用开源组件IIRF),ASP.NET2.0内置的urlMappings和基于自定义HTTPModule的URL重写(使用NBear.Web中的UrlRewriteModule实现),并探讨URL重写中...
ASP.NET ISAPI 扩展 (aspnet_isapi.dll) 在 IIS 进程地址空间 (inetinfo.exe) 中运行,并通过命名管道将 ASP.NET 文件类型请求转发给 ASP.NET 辅助进程。 可以通过 IIS 元数据库中定义的映射,将特定的 ASP.NET 文件...
网上很多关于url重写的教程都推荐下载某某某组件, 我个人不喜欢这样,即使是M$的组件也一样,因为我们干程序员的,越贴近真相越好。那么我也写一个关于url重写的文章,希望对和我一样有个性的coder们有点帮助。
UrlRewriter.NET是一个开源的、轻量级、高配置的URL重写组件,支持ASP.NET 1.1 和ASP.NET 2.0。UrlRewriter.NET提供地址重写的功能,它类似于Apache服务器中使用.htaccecc进行地址重写。而且使用本组件,您无需安装...
Web服务器接收到请求时,会对所请求文件的文件扩展名进行检查,确定应该由哪一个ISAPI扩展(Asp.Net是Web服务器下的一个ISAPI扩展)来处理请求,并传递给它(这里指Asp.Net)。Asp.Net处理已映射到其上的文件扩展名(....
描 述:UrlReWrite(Url重写或伪静态)完美示例源码 UrlReWrite(Url重写或伪静态)完美示例源码,已利用ActionlessForm...幸而ASP.NET给我们提供了强大的可扩展性,能让我们自己定义页面的访问规则,很方便实现URL重写。
IIS基于正则表达式的URL重写筛选器(ISAPI)
ASP.net页面的扩展名为aspx ASP.NET模块(一个名为aspnet_isapi.dll的文件) 处理扩展名为aspx、ascx、asmx的文件 c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
讲座内容: 在本节中,我们将带领大家去深入了解ASP.NET架构,包括一个HTTP请求的生命周期、HttpModule是如何工作的等。... 产品: ASP.NET. 受众: 开发人员. 持续时间: 90 分钟
ASP.NET底层机制,深入介绍ASP.NET处理请求的整个过程,详解HttpHandler,HttpModel,ISAPI等内容,好书,推荐推荐
1、打开IIS管理,右击站点属性。 2、切换到“主目录“,点“配置“按纽. 3、打开应用程序配置,点”添加“按纽.... 您可能感兴趣的文章:ASP.NET网站伪静态下使用中文URL的方法asp.net不用设置iis实现url重写 类似伪
ISAPI_Rewrite 3.0 URL重写规则 301重定向 防盗链
完美的重写了URL,/products.aspx?.../web为测试站点,具体配置在web.config中 URL重写技术在今天已不是什么新鲜的话题了...幸而ASP.NET给我们提供了强大的可扩展性,能让我们自己定义页面的访问规则,很方便实现URL重写。
【基于IIS层的IIRF实现URL重写 + 完美解决POSTBACK问题】 1.请在 Windows2003 操作系统环境下测试。 2.请确认您的IIS版本为 IIS6.0+ 。 3.请确认您已经将此项目的ASP.NET网站版本手动设置为 .NET 2.0. 4.请将Bin...
这篇文章以非常底层的视角讲述了Web请求(request)在ASP.NET框架中是如何流转的,从Web服务器,通过ISAPI直到请求处理器(handler)和你的代码.看看在幕后都发生了些什么,不要再把ASP.NET看成一个黑盒了.
HttpHandler实现了类似于ISAPI Extention的功能,他处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现通过实现IHttpHandler接口来达到。而HttpModule实现了类似于ISAPI Filter的功能。
在ASP.NET中,可以创建ASP.NET网站和ASP.NET应用程序,但是ASP.NET网站和ASP.NET应用程序开发过程和编译过程是有区别的。ASP.NET应用程序主要有以下特点: q 可以将ASP.NET应用程序拆分成多个项目以方便开发,管理和...
另一个可能的原因 可能是因为你在后台启用了Url重写功能,如果你设置了非aspx扩展名的文件扩展名,那么你需要手动在IIS(即Internet信息管理器)里边进行设置,具体方法如下: 首先在左边栏里需要设置的网站或虚拟...
说明 IIRF与ISAPI_Rewrite的规划区别只在于IIRF不...相对比ASP.NET2.0自带的URL重写,具有更好的性能和许多我们所需要特性,重要的一点在于:它可以支持无扩展名的URL(例如:cnlbogs.com/****,你无需在创建一个默认的d
支持HTTP/1.1、断点续传、大文件下载、正则表达式URL重写、虚拟目录等,可通过ISAPI接口、FasctCGI接口实现执行服务器脚本(如PHP,asp,asp.net等),性能完全超越IIS等很多主流WEB服务器软件。 使用FasctCGI时,在...