ASPNET伪静态 UrlRewriteUrl重写 实现和配置转载.docx
《ASPNET伪静态 UrlRewriteUrl重写 实现和配置转载.docx》由会员分享,可在线阅读,更多相关《ASPNET伪静态 UrlRewriteUrl重写 实现和配置转载.docx(6页珍藏版)》请在冰豆网上搜索。
ASPNET伪静态UrlRewriteUrl重写实现和配置转载
ASP.NET伪静态UrlRewrite(Url重写)实现和配置------转载
2010-08-3011:
06 来源:
博客园 作者:
夏楚枫 阅读:
81次
核心提示:
大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的
核心提示:
大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的运行稳定和速度...
大家一定经常在网络上看到很多网站的地址后缀都是用XX.HTML或者XX.ASPX等类似静态文件的标示来操作的吧,那么大家有怀疑过他真的是一个一个的静态生成的文件么,静态文件的生成的优缺有好有坏,对于访问量很大的网站,利用静态文件可提高服务器的运行稳定和速度,坏处就是生成列表的时候会因为增加一条记录从而需要所有相关的列表进行重构,当然不排除有的公司已经攻克的这个问题,但对于大众程序员来说,他依旧是个问题,而且生成的化对于中小型网站也不一定会比动态的号,因为管理比较麻烦。
结构以上事实,然后伪静态技术产生了,规范的说就是URL重写技术,他对于ASPX格式支持最好,当然也可以重写HTML格式的文件,但这需要IIS的设置,相对比来说,ASPX格式的更方便,本站就是采用了该URL重写技术,这个技术优点显而易见:
方便搜索引擎收录,方便查看,等等。
那么接下来我们来看看如何配置他吧
首先你要在你的项目里引用两个DLL:
URLRewriter.dll
ActionlessForm.dll
真正实现重写的是URLRewriter.dll但是如果你要实现分页,那么必须使用这个ActionlessForm.dll
URLRewriter.dll1、下载文件下载地址1:
下载地址2:
下载地址3:
下载地址4:
本站下载
2、配置WEB.CONFIG文件在项目中引用这个程序集,伪静态语法...(例把.aspx的页面用.html来表示,web.config文件中-->添加以下节点
--一个参数->
~/cn/ss_(.[d]*).html
~/cn/news.aspx?
id=$1
--传两个参数的-->
~/cn/ss_(.[d]*)0(.[w]*).html
--(.[d]*)(.[w]*).html 或者 ss_,(.[0-9]*),(.[0-9]*).html-->
[CDATA[~/cn/news.aspx?
id=$1&sid=$2]]>
--三个参数-->
~/cn/ss_(.[d]*)0(.[w]*)0(.[w]*).html
[CDATA[~/ZH-CN/news.aspx?
id=$1&sid=$2&n_id=$3]]>
~/dfsaddf/index(d*).html
~/Favorites_Page.aspx
--
-->
设置完以上步骤,就基本可以运行了,其中标签里面就是重写的一个模块,里面的是重写后的地址,而则是原地址。
3、配置IIS解析.html文件
配置IIS6.0IIS配置:
网站->属性->虚拟目录->配置(G)...->映射->通配符应用程序映射->添加
可执行文件:
c:
frameworkv2.0.50727aspnet_isapi.dll
扩展名为:
.html
确认文件是否存在:
不选.
配置IIS7.5你的网站-->IIS中处理程序映射-->
添加脚本映射(路径:
*.html可执行文件%windir%Microsoft.NETFrameworkv2.0.50727aspnet_isapi.dll名称:
任意,比如Hml)
添加通配符脚本映射(路径:
*可执行文件:
C:
WindowsMicrosoft.NETFrameworkv2.0.50727aspnet_isapi.dll名称:
任意,比如All)
托管处理程序映射(路径:
*可执行文件:
System.Web.UI.PageHandlerFactory名称任意比如Html-Integrate)-------->
IIS中模块-->添加---->(名称:
任意如All类型:
URLRewriter.ModuleRewriter把仅针对向应用程序或托管处理程序发出请求调用勾上ok)
-->ok
4、以上配置好之后就可以通过以下方式来访问了
例如用户输入hostname/d11.html,
服务器会把他重写为http:
//hostname/default.aspx?
id=11。
换句话说用户输入http:
//hostname/d11.html,
实际访问的是http:
//hostname/default.aspx?
id=11ActionlessForm.dllnamespace ActionlessForm
{
public class Form :
System.Web.UI.HtmlControls.HtmlForm
{
protected override void RenderAttributes(HtmlTextWriter writer)
{
writer.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");
writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");
this.Attributes.Render(writer);
base.Attributes.Remove("action");
if (base.ID !
= null)
writer.WriteAttribute("id", base.ClientID);
}
}
}
创建此类并对其进行编译之后,要在ASP.NETWeb应用程序中使用它,应首先将其添加到Web应用程序的References文件夹中。
然后,要使用它来代替HtmlForm类,做法是在ASP.NET网页的顶部添加以下内容:
<%@RegisterTagPrefix="skm"Namespace="ActionlessForm"Assembly="ActionlessForm"%>然后,将(如果有)替换为:
Formid="Form1"method="post"runat="server">并将右边的标记替换为:
Form>
成功!
虚拟主机
在网上看到,很多朋友在中做urlrewrite,用的是HttpHandle+Server.Transfer的方法。
其实这种方法是错误的。
第一,HttpHandle是实现不了urlrewrite的;
第二Server.Transfer是标准的重定向,根本不是urlrewrite。
其实,实现urlrewrite不用自己HttpHandle,也不用自己实现HttpModule,用几行代码就可以轻松实现。
我这里介绍的是在虚拟主机上,虚拟主机不同于自己的服务器,你是没有权限去修改iis,也没有权限去安装iisrewrite之类的iis插件。
但是我们仍然可以轻松完成需要的功能。
具体做法如下:
打开global.asax.cs,定位到protectedvoidApplication_BeginRequest(Objectsender,EventArgse)。
从方法名我想也能猜到它是做什么的。
输入如下代码:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string oldUrl = HttpContext.Current.Request.RawUrl ;
string pattern = @"^(.+)default/(d+).aspx(?
.*)*$";
string replace = "$1default.aspx?
id=$2"; if(Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
string newUrl = Regex.Replace(oldUrl, pattern, replace, RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath(newUrl);
}
}
有了上边这段代码,我访问一个类似:
.../default/123.aspx的网址,当然这个网址在我的电脑上不存在,它就会被定向到:
.../default.aspx?
id=123。
当然,利用功能强大的正则表达式,你可以任意按照自己的需要来重写url,这一切都是在服务器端默默的进行,在客户端是不会有任何察觉的。
由于是在虚拟主机上,我们只能重定向.aspx文件,如果是自己的服务器,只要把后缀名在iis中注册一下,就可以实现任意后缀名的处理。
比如你可以注册一个*.myweb这样的类型,这样别人访问default/456.myweb时,你可以把它重定向到default.aspx?
id=456。
总之一句话,只要你能想到,.net就可以帮你实现,并且这一切不需要多少的代码。