asp.net实现伪静态的几种常用的方法
实现伪静态的主要作用是有利于SEO。
常用的有以下几种方法:
第一种是在配置文件中进行配置,方法如下:
第一步:下载UrlRewrite;
第二步:将bll文件引用到项目中去。
第三步:开始在配置文件中进行配置信息
1.现在<configuration>标签下添加如下代码:(注意下面的代码必须放到<configuration>标签的第一个子位置)
<configSections> <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/> </configSections>
2.在 <system.web>标签下添加如下代码
<httpHandlers> <add verb ="*" path ="*.aspx" type ="URLRewriter.RewriterFactoryHandler, URLRewriter" /> <add verb ="*" path ="*.html" type ="URLRewriter.RewriterFactoryHandler, URLRewriter" /> </httpHandlers>
3.在</configuration>前添加如下代码
<RewriterConfig> <Rules> <RewriterRule> <LookFor>~/bdt.([\d]*).html</LookFor> <SendTo>~/bdt.aspx?page=$1</SendTo> </RewriterRule> <RewriterRule> <LookFor>~/default.html</LookFor> <SendTo>~/default.aspx</SendTo> </RewriterRule> </Rules> </RewriterConfig>
4、根据自己的需要在第三步的时候进行自行配置
其中有参数的要用到正则表达式:
(.*):应用于根目录下所有页面;
$1:与(.*)对应,也就是url显示的是什么对应的就是哪个aspx,如index.html对应index.aspx
有时候我们需要多个参数,可以使用下面的方法
< RewriterRule > < LookFor > ~/ProductClassList-(.[0-9][0-9][0-9]*)-(.*).html </ LookFor > < SendTo > <![CDATA[ ~/productclasslist.aspx?cn=$1&c=$2 ]]> </ SendTo > </ RewriterRule >
$1:对应第一个(.*)
$2:对应第二个(.*)
$3:对应第三个(.*)
$4:对应第四个(.*)
< LookFor > ~/ProductClassList-(.[0-9][0-9][0-9]*)-(.*).html </ LookFor >
< SendTo > <![CDATA[ ~/productclasslist.aspx?cn=$1&c=$2 ]]> </ SendTo >
</ RewriterRule >
至此,使用配置文件实现伪静态的方法就已经完成。
下面来谈谈使用另外一种方法实现伪静态:
在asp.net的全局文件(Global.asax)中进行设置
在Application_BeginRequest事件的响应代码中做处理。每一次请求都会调用此方法(包括请求CSS或者JS代码)
修改后的代码如下
protected void Application_BeginRequest(object sender, EventArgs e) { string oldUrl = HttpContext.Current.Request.RawUrl;//获取接收到的URL string pattern = @"^(.+)Default-(\d+).html";//匹配字符串 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); } }
后台处理代码:
protected void Page_Load(object sender, EventArgs e) { if (null != Request.QueryString["id"]) { Response.Write("id=" + Request.QueryString["id"].ToString()); } else { Response.Write("id为空"); } }
运行效果:
还有一种是IIS筛选器来进行重定向:
具体实现如下:
1、下载IISUrlRewriter组件(见附件)。然后在UrlRewriter.ini中配置访问规则。如:
RewriteRule ^(.*)/index\.html$ $1/index.aspx
RewriteRule ^(.*)/products/([0-9]+)\.html$ $1/GoodsDetail.aspx?id=$2
新规则直接增加即可。
2、打开IIS管理,右击站点属性,打开ISAPI筛选器标签。见下图。
3、添加ISAPI筛选器。
4、确定。然后重启IIS。