1. 安装UrlRewriter组件模块,安装完后会作为一个IIS功能模块在IIS管理器中能看到。
(或者将组件拷贝用户网站目录下,这是另一种可实现URLWRITE的方式。将Bin文件夹下的文件添加到用户网站的Bin目录下,如果没有此目录,请在网站根目录下新建。(拷贝的文件包括:Intelligencia.UrlRewriter.dll,FormRewriterControlAdapter.dll)
建议用模块化方式实现REWRITE,因为使用起来方便简单。
2. 配置组件,用户自定义重写规则
修改Web.Config文件,添加rewriter组件:
1)添加 Configuration section handler:
<configSections> <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigura tionSectionHandler, Intelli gencia.UrlRewriter" /> </configSections>
2)添加 UrlRewriter mapper HttpModule:
<system.webServer> <modules> <add type ="Intelligencia.UrlRewriter.RewriterHttpModule, Ielligencia.UrlRewriter" name="UrlRewriter"/> </modules> </system.webServer>
3) 在 Web.Config的configuration结点中添加重写规则
注:1.请先备份好原来的配置文件,如果出现问题,还可恢复;
2.这里的重写规则需根据用户网站的需要添加,规则需有正则表达式知识的人员设置。
例子:
<rewriter> <rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.pdf|\.css|\.js)(\?.+)?)$" to="$1" processing="stop" /> <rewrite url="~/lmh$" to="~/Users.aspx?user=lmh" processing="stop" /> <rewrite url="~/tags/(.+)" to="~/tag/tagcloud.aspx?tag=$1" processing="stop"/> <rewrite url="^~/mypage(\?.+)?$" to="~/index.htm$1" processing="stop" /> <rewrite url="^(.*)/(\?.+)?$" to="$1/index.htm$2?" /> </rewriter>
url是可以使用正则表达式的。比如上面的例子:
规则一:当发现文件类型为 .gif, .png,.jpg, .ico, .pdf, .css or .js时,停止rewrite
规则二:就是将/lmh重写到/Users.aspx?user=lmh,$在正则表达式中表示是串的结束,也就是说/lmhe是不会被重写到to后的地址的,如果把$去掉则可以。
规则三:将tags/xxx重写为tag/tagcloud.aspx?Tag=xxx
规则四:当用户输入错误象mypagexxx形式的地址时,转到网站默认页面
规则五:设置用户网站的默认页面为index.htm
4) Web.Config文件保存后即可生效
5) URLrewrite 支持 asp,asp.net,php 等各种脚本.
可能出现的问题:
问题一:
不少人在第一次使用URL重写时,会发现他们的图像和CSS样式表引用有时会停止工作。
原因:
这是因为他们在网页里有对这些文件的相对引用,当你开始在应用里重写URL时,你需要意识到浏览器经常会在不同的逻辑层次结构层上
(logical hierarchy levels)请求文件,而不是实际存储在服务器上的东西。
建议:
1.网页中的引用的图片和文件的路径请采用绝对路径
问题二:
404错误(页面无法找到)
原因:
正则表达式设置错误或者没有设置相应的规则,可能会导致页面无法找到错误
建议:
1.修改重写规则
2.刚开始设置时,可以先用几个简单的规则测试一下,看是否正常
问题三:
当用通配符处理页面请求以后,在IIS中的默认页面设置可能丢失,你可以在你的规则的最后加上这条规则,来保证默认页面的设置是对的。
如果你想支持多个默认页面的,规则如下:
<if url=”^(.*)/(\?.+)?$”> <rewrite exists=”$1/default.aspx” to=”$1/default.aspx$2″ /> <rewrite exists=”$1/index.aspx” to=”$1/index.aspx$2″ /> <rewrite exists=”$1/index.html” to=”$1/index.html$2″ /> </if>
注意上面不要加太多的文件,因为检查文件是否存在比较耗费时间,写太多会影响性能。
用户需注意的问题
1.安装此组件后,可能会对网站的访问速度造成一定的影响。
2.用户需用尽可能准确的重写规则,以避免产生意想不到的结果。比如上面的[规则二],如果你只想匹配lmh结尾的页面,就加上$,当然不加
也可以达到目的,只是它还会匹配象lmha、lmhb、lmhc……,也许这些是你不想转的页面。
特别注意:
站点的使用的地址池最好是.net的经典模式。不然就会出现首页可以正常其他内页都是加载404的情况。