首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

[共享+散分]ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI。该如何处理

2012-01-14 
[共享+散分]ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI。URL重写已经有很多的方法,但是多数都有一

[共享+散分]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.com   和   www.1370000.com   这两个网站就是使用的这种方法。


本来想发在csdn的blog里面的,可惜又上不去了,所以只好写在这里了。
http://jyk.cnblogs.com/jyk/archive/2007/03/03/aspnetURL.html


[解决办法]
学习了!
[解决办法]
前两天刚研究过ISAPI,今天又学习了
[解决办法]
学习
[解决办法]
有创意的方法, 有意思.
[解决办法]
感谢
[解决办法]
沙发!顶下!
[解决办法]
学习
[解决办法]
正需要,谢谢,请问 能把 x.aspx?id=1234 转化成 x1234.html吗? x.aspx 转化成x.html吗?

请教如何转? 对性能和速度没有什么影响吧?

我要重写,主要为了静态网页,尽快被搜索引擎收录
[解决办法]
学习!以前见过一个网站无论点击哪个连接URL都是一个,没有任何变化。不知道这个是怎么实现的,具体网址记不清了。。。
[解决办法]
CS系统中有介绍.到WEBCONFIG中配置一下...叫httph啥类的
[解决办法]
这么作性能性能太低了,转来转去的。

没有必要为穿马甲动筋骨。
------解决方案--------------------


学习ing.........
[解决办法]
学习ing.........

[解决办法]
up
[解决办法]
在cnblogs看过……
[解决办法]
学习!
[解决办法]
up
[解决办法]

url= "a/125.aspx "

Dim r As New Regex( "\/(\w*)(?=.aspx|.abc|.html) ", RegexOptions.Compiled)

m = r.Match(url).Result( "$1 ") 'm=125


list.aspx?id=m 'id=125
[解决办法]
楼主的 想法
虽然很不错...
但是强烈不建议大家这样..
第一感觉就是 性能是 个 很大的 瓶颈
[解决办法]
要得就是想法啊
有创意就是好同志
[解决办法]
直接在HttpHandler里转发不行吗?甚至HttpModule都能干这事
[解决办法]
学习一下~!
[解决办法]
学习一下~!

[解决办法]
学习
[解决办法]
gz
[解决办法]
呵呵,不错
[解决办法]
IIS6通配符应用程序 + HttpModule + HttpContent.RewritePath(url);
[解决办法]
正则表达式...
http://msdn2.microsoft.com/zh-cn/library/hs600312(VS.80).aspx
[解决办法]
在你cnblogs的博客上已经看过了 呵呵
[解决办法]
收藏
[解决办法]
创意不错,学习学习
[解决办法]
通过config文件可以直接指定错误是转到的404页面,也就不需要修改iis服务器了,只需要修改你的config,不过一直觉得性能可能是个问题
[解决办法]
这个就好像在 try{}catch{}的catch块里处理业务逻辑和业务流转一样,应该是不可取的
[解决办法]
记住一点,不要依赖异常。
[解决办法]
楼主想法不想,不过有几个人能自己设置IIS啊?包括我自己,主页空间用的都是虚拟主机,根本不可能设置IIS的,所以这个方法根本用不了!
[解决办法]
谢谢楼主
[解决办法]
利用异常,方法过于异常了吧,不提倡.不过,具备条件的朋友可以试试
[解决办法]
支持.
[解决办法]
不错的样子
[解决办法]
很好,有创意~
[解决办法]
接分,创新总是好的,不过楼主已经成功blog了
------解决方案--------------------


up
[解决办法]
s顶顶
[解决办法]
不错
[解决办法]
恩.这个方法不错...

比我们的方法的效率应该要高。
现在我们的处理方式把所有请求都映射给asp.net的dll处理.


[解决办法]
UP
[解决办法]
http://ssxz.com/iuhxq/index.html

有重写完整代码下载
[解决办法]
mark
收藏
[解决办法]
不错,这也能想到
[解决办法]
思路的确不错.支持一下,有时间我也试试
[解决办法]
赞同!很有启发的想法!

不过也有不足之处阿:
1、就像你自己说的,没有服务器就不能装isapi,没有服务器也不好改IIS的设置吧?(倒也不是不可能)
2、相同条件实现相同功能早就有更好的办法,我记得MSDN的Scott写过。

不过还是很喜欢你的想法,我就没想到,我太依赖现成的了。

热点排行