Posted on 2006-01-09 17:04
随心所欲 阅读(5119)
评论(28) 编辑 收藏 所属分类:
通讯/WebServer,
其他技术
应用:面向搜索引擎友好。
比如xxx.com/news.aspx?id=5 这样的网址搜索引擎是不感兴趣的, 可以重定向成 xxx.com/news/5.htm。
重定向有几个层次1:IIS之上
在请求没有进入IIS分配aspx处理的时候进行重定向。好处是不管是不是xx.aspx都可以进行处理,就算是php的一样可以重定向到asp.net处理程序里面。
2:Asp.net中
比如放在globle里面,可以重定向xx.aspx,但是不能重定向目录,或者.htm之类的。(设置筛选器也可以,麻烦一点)
所以我选择的是第一种方法。
有一个工具很不错:IISRewrite,qwerksoft制作。
安装使用方法:
1:把配置文件rewrite.ini和RewriteEval.dll两个文件放在同一个目录下,现在是建立在C:\WINDOWS\system32\inetsrv\IISRewrite目录里面。
2:在IIS上添加一个ISAPI筛选器:IIS管理工具/要添加的网站/属性/ISAPI筛选器/添加--找到RewriteEval.dll
3:测试运行:重启IIS服务,把helloworld.htm文件放置到IIS主目录,然后访问localhost/xxhelloworldxxx. 如果可以打开该文件,表示安装成功(凡是任何包含helloworld字样的访问路径都可以)
4:配置重订向规则:打开rewrite.ini,然后加入一个规则 RewriteRule .*ventureT/([^.]*) /ventureT/subT/sIndex.aspx?id=$1。 使用的是正则表达式,意思是:凡是没有任何后缀(不加‘.’)的访问,都没重定向到sIndex.aspx,并且把ventureT/以后的字符串作为参数传递给sIndex。
5:正则表达式不区分大小写
6:意义:不仅可以重订向xx.xxx这样的文件,还可以重定向目录、没有后缀的等等(内置在IIS里面的都不能实现这种功能)
7:程序里面的代码不需要修改:Resposne.Redirect("xxx.aspx?id=xx")这样的语句依然没问题,虽然在IIS上重定向,他依然可以把这个地址重定向到你需要的地方;用js打开的就跟没问题了。
至于第二种方法,也可以,但是不能重定向目录(还没有重定向到asp..net的处理域,所以代码不会执行)
有高手已经写的比较清楚了(ThunderMain.URLRewriter),有源码。http://www.cnblogs.com/edobnet/archive/2004/06/02/12866.aspx这是配置的一个例子
<rule>
<url>VentureT/([^.].*)</url>
<rewrite>VentureT\subT\sIndex.aspx?id=$1</rewrite>
</rule>
还有一个也不错:url rewriter,Helicon制作原文:
http://www.chedong.com/tech/google_url.html也是用正则表达式来写的。
其实还有一种方法,就是自己写程序作重定向了。
Feedback
url rewriter,Helicon
不错,不过就是收钱的
网站www.danceshopper.com 就用了这个,省了朕很多事情
有一个免费版本 功能比较弱
我想知道能否自己用ASP教本实现这个重定向功能。因为服务器扩展我做不了,我不具有服务器操作的权限。
to aidi :
可以,放在global的处理中。
但是有局限性。
谢谢回复, 但现在我连GLOBAL也用不了, 怎么办呢? 有只用脚本实现重定向的可能吗?
to aidi:
即使自己写HttpHandler也得操作一些服务器设置,只用脚本怕是有困难。
你具体要重定向哪一类文件呢?
“?id=5 这样的网址搜索引擎是不感兴趣的”这有点信口开河了吧?!你是说哪一个搜索引擎,举出来实例?!
搜索google等,都能看到带参数的。
通常带参数的不备收录,往往是因为他们本来就是需要登录之后才能访问的,或者经常改变内容从而不被判为重要网页(这也说明搜索引擎的技术还有成熟的余地)。与url何干?
搜索引擎在收录时对文件类型是有偏好的。
把带参数的动态网页打扮的像静态网页一样,让搜索引擎收录的可能性增大,这就是目的。
re:
asp.net中,还是可以重定向目录以及htm之类的
to sp1234 :
对根目录的访问,直接被IIS映像到别的进程处理去了。
请问用了这个以后,把站点移到新的没有IISRewrite的服务器怎么办?不是要重新改站点的所有链接了吗?好大工程的啊~~
to gzhzh:
只能如此了。不过你可以继续使用IISRewrite。
Apache下边也有这样的module。
有了IISRewrite,直接转不就得了,为什么还要NET的URLRewriter呀,一点都看不懂啊,郁闷.
请问园主,做一个文件的重写URL就要写一条规则是吗?如果不是,该如何实现呢?谢谢!!!
1:可以写一条规则
2:可以实现一个IHttpHandler
RewriteRule .*ventureT/([^.]*) /ventureT/subT/sIndex.aspx?id=$1
这是一个例子。
意思是:把访问ventureT/下边的不包含有“.”的任何字符 都转换成/ventureT/subT/sIndex.aspx?id=$1。 其中$1就是([^.]*)匹配之后的结果。
根据你的具体需求,你自己写你自己的匹配算法和正则表达式。^_^
谢谢园主~~
最终还是要转向一个具体的地址:(
如果可以做成
RewriteRule .*/([^.]*) /*.aspx?id=$1
就好了,访问的目录名是什么,就重定向什么文件名,一条就可以搞掂~比如访问aa/12/就会重定向到aa.aspx?id=12~~
to gzhzh:
你说的这种功能当然可以做到,并且很简单。
RewriteRule (.*)/([^.]*) /$1.aspx?id=$2 差不多就是这种表达式了。
可以做很多个匹配,每一个()算一个;引用时根据顺序$1,$2,$x...
正则表达式的功能非常的强大。
内置在IIS里面的都不能实现这种功能)
采用乏匹配,可以实现
请问qwerksoft的IISRewrite性能如何?日访问10万IP性能方面会有明显的问题吗?谢谢
@野猪&翔帅
您这是要把我的东西看一遍啊,呵呵。有些写得比较粗陋,请多指正。