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

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不支持。因为asp的Server.Transfer不能带参数(?id=jyk),不能传递参数的重写几乎没有什么意义。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python爬虫实战

Python爬虫利器:Requests库的使用

写了一些爬虫,从urllib库转到requests库,到目前为止,个人感觉requests库是最简单易用的HTTP库,以下这段话来自requests官网:

701
来自专栏我是攻城师

关于kafka连接的一个小问题

3494
来自专栏Albert陈凯

mapreduce项目调优

一、调优的目的 充分的利用机器的性能,更快的完成mr程序的计算任务。甚至是在有限的机器条件下,能够支持运行足够多的mr程序。 二、调优的总体概述 从mr程...

3326
来自专栏wblearn

redis应用的总结

对最近项目应用redis做一个简单总结,项目中的营业网点资料和客户资料等模块以后的资料量势必会随着业务的扩张会越来越大,可能会造成系统性能瓶颈及用户体验不佳等,...

781
来自专栏决胜机器学习

PHP代码调试与日志

PHP代码调试与日志 (原创内容,转载请注明来源,谢谢) 一、代码调试 由于PHP很少有类似java、.NET的断点调试工具,因此通常都是要采用输出中间结果的...

1K5
来自专栏散尽浮华

nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录

Nginx的geo模块不仅可以有限速白名单的作用,还可以做全局负载均衡,可以要根据客户端ip访问到不同的server。比如,可以将电信的用户访问定向到电信服务器...

3446
来自专栏Python

python并发编程之多进程理论部分

一 并发与并行   无论是并行还是并发,在用户看来都是'同时'运行的,不管是进程还是线程,都只是一个任务而已,真是干活的是cpu,cpu来做这些任务,而一个cp...

2115
来自专栏PHP技术大全

通过代码审计找出网站中的XSS漏洞实战(三)

笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联...

1402
来自专栏纯洁的微笑

jvm系列(十一):Java 8-从持久代到metaspace

译者 梅小西,原文出处:http://blog.csdn.net/wang8118/article/details/45765869 Java 8介绍了一些新语...

3736
来自专栏Django Scrapy

day4 hadoop

最新日志查看 ls -lrt 监控系统命令 top vmstat * ( *输入数字 前边是多少秒一次 后边是次数) Oracle创建用户等一系列 cr...

2754

扫码关注云+社区