我们的网页URL后经常会跟有多个的参数,比如Information.aspx?ID=1&Type=2,这样的URL让人太直观的看到了参数,感觉不是很好,而且会导致URL很长,所以可以用下面的方法来重写URL,即可以缩短URL、又易于被搜索引擎收录,还可以隐藏真实的路径,使参数变得隐晦一点点,提高安全性。
使用C#重写URL的步骤:(以改写Information.aspx?ID=1&Type=2为例)
第一步,下载MS的URLRewriter.dll,添加引用到你的Web程序的Bin文件夹下,下载地址是http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi
第二步,下载完成后,在web.config里设置如下:
<?xml version="1.0" encoding="utf-8" ?><!--overred--><configuration><configSections><section name="RewriterConfig"type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /></configSections><RewriterConfig><Rules><RewriterRule><LookFor>~/Infor_(/d+)_(/d+)/.aspx</LookFor><SendTo>~/Information.aspx?ID=$1&Type=$2</SendTo></RewriterRule></Rules></RewriterConfig><system.web><httpHandlers><add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /></httpHandlers></system.web></configuration>
其中 <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />用于指定配置节"RewriterConfig"的处理程序类的名称为”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,该类存在于bin目录下的URLRewriter .dll文件中。
关键的是这两句 <LookFor>~/Infor_(/d+)_(/d+)/.aspx</LookFor><SendTo>~/Information.aspx?ID=$1&Type=$2</SendTo>
<LookFor>~/Infor_(/d+)_(/d+)/.aspx</LookFor>表示,用户输入的URL(即显示的URL),_(/d+)_(/d+)/.aspx是 URL中文件名匹配的正则表达式(大家也可根据自己的需要自行设定)。
希望对你有帮助!
1.下载ISAPI_Rewrite.ISAPI_Rewrite分精简(Lite)和完全(Full)版.精简版不支持对每个虚拟主机站点进行重写,只能进行全局处理.不过对于有服务器的朋友,精简版也就够啦.2.安装.msi的文件,和装一般程序一样装就可以了,俺就装在D:/ISAPI_Rewrite.
3.接下来一步比较重要哦,看仔细喽.打开Internet 信息服务,右键,web站点属性,电ISAPI筛选器选项卡.添加筛选器,名称自己填,路径自己指定ISAPI_Rewrite.dll,然后确定.
4.来测试一下.新建一个1ting.asp,里面写上
<%=request.querystring("inso")%>
,效果就是执行的时候1ting.asp?inso=*浏览器显示*.
5.这一步很重要哦,开始添加rewrite规则.正则,好头痛,幸亏这个例子比较简单.
找到ISAPI_Rewrite目录,把httpd.ini的只读属性去掉,打开编辑.我们要把1ting.asp?inso=im286映射成为1ting-im286.html这样的类型,需要在httpd.ini里加上这么一行:
RewriteRule /1ting-([0-9,a-z]*).html /1ting.asp/?inso=$1
,保存.
6.来来来,到浏览器里查看一下效果吧.输入http://127.0.0.1/1ting.asp?inso=im286和http://127.0.0.1/1ting-im286.html,显示的内容是不是都是im286?这就证明成功啦!
嘿嘿,1ting-im286.html这样的页面要比1ting.asp?inso=im286容易收入,所以现在还在用动态方式的朋友可以尝试一下这样的静态映射效果. IIS Rewrite也可以实现这样的功能。
------------------------------------------------------
ASP之URL重写
下载ISAPI_Rewrite解压到任意文件夹安装,给IIS用户读取权限,在IIS右键点击一个站点,属性,ISAPI筛选器,添加,筛选器名称一定得叫 re,可执行文件就点浏览找到你解压的目录Rewrite.dll加上即可。
重启IIS后应该就能支持URL重写规则了。
需要修改解压目录中的httpd.ini这个文件
RewriteRule /info_(/d+)/.htm /info/.asp/?id=$1 [N,I]
这句话就可以把提交的地址http://www.xxx.com/info_122.htm映射到真正的地址 http://www.xxx.com/info.asp?id=122
如果你在处理数据翻页,那么写法是:
More_<%=Page%>_<%=type%>.html (注:page是翻页页数,type是数据类型)
表现形式:More_1_95.html
如果翻下一页,则为:More_2_95.html,继续下一页的循环,则是:
More_3_95.html,以此类推。
不过你需要在httpd.ini文件中增加以下代码:
RewriteRule /More_(/d+)_(/d+)/.html /jsp/more/.jsp/?page=$1&type=$2 [N,I]
如果你的动态程序有多个参数需要传递,那么就增加多个(/d+)即可,如下:
RewriteRule /More_(/d+)_(/d+)_(/d+)/.html /jsp/more/.jsp/?page=$1&type=$2&type2=$3 [N,I]
翻页处理表现形式是:More_1_95.html
如果想把http://www.xxx.com/info.asp?id=50#abc 转换成静态的网页
因为#abc是程序处理了ID=50这个变量生成静态页面之后按锚点又做了一次页内链接,所以应该这么做映射
http://www.xxx.com/info.asp?id=50#abc转换成http://www.xxx.com/info_50.htm#abc,重写规则如下:
RewriteRule /info_(/d+)/.htm#(/d+) /info/.asp/?id=$1#$2 [N,I]
注意:以前在Window 2000 IIS5.0一直使用ISAPI_Rewrite进行动态链接重写HTML静态网址,
最近升级到 Widnows 2003 IIS6.0 后,发现ISAPI_Rewrite根本运行不起来,在IIS 6.0里面一直提示“未加载”,后来查了又查,原来是文件的权限问题。
IIS 6.0 ISAPI_Rewrite 是在Service帐号下运行的,将数据文件的读写权限给予Service 帐号后,ISAPI_Rewrite 终于可以正常运行了。
通过Intelligencia.UrlRewriter.dll组件可以很轻松的在asp.net中实现url重写,只需要把Intelligencia.UrlRewriter.dll添加到项目的bin文件夹下,再在web.config中稍微配置一下就可以成功的实现asp.net中的url重写,下面讲一下具体的配置步骤。第一步:从网上下载Intelligencia.UrlRewriter.dll文件,放到bin文件夹下。
第二步:假如要实现Default.aspx?id=25显示为Default_25.html只需要在Web.config配置如下信息。
<configuration>
<configSections>
<!--UrlRewriter-->
<section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>
<rewriter>
<rewrite url="~/Default_(\d+).html$" to="~/Default.aspx?id=$1" processing="stop" />
</rewriter>
<system.web>
<httpModules>
<add type="Intelligencia.UrlRewriter.RewriterHttpModule,Intelligencia.UrlRewriter" name="UrlRewriter" />
</httpModules>
</system.web>
</configuration>
经过上面简单的配置就可以在浏览器中输入.../Default_25.html就可以看到../Default.aspx?id=25的效果了
hehe
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)