URLRewriter文件目录伪静态

 下面介绍的是微软的URLRewriter方法  

1.首先下载URLRewriter.dll,下载之后直接复制到你的网站的bin目录中  
2.配置你的web.config文件  
在<configuration>节点下加  
<configSections>  
  <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />  
  </configSections>  

<RewriterConfig>  
  <Rules>  
  <!--一下三个是我自己写的测试的,当然你可以写很多个 -->  
  <!--这个是把http://localhost:2001/default.aspx?id=1 生成http://localhost:2001/d1.aspx 这种页面 -->  
  <RewriterRule>  
  <LookFor>~/d(\d{0,5})\.aspx</LookFor>  
  <SendTo>~/default.aspx?ID=$1</SendTo>  
  </RewriterRule>  
  <!--这个是把http://localhost:2001/article.aspx?id=1 生成http://localhost:2001/1/a.html 这种页面 -->  
  <RewriterRule>  
  <LookFor>~/(\d{0,5})/a\.html</LookFor>  
  <SendTo>~/article.aspx?id=$1</SendTo>  
  </RewriterRule>  
  <!--这个是把http://localhost:2001/test.aspx?id=1 生成http://localhost:2001/1/ 这种页面 -->  
  <RewriterRule>  
  <LookFor>~/(\d{0,5})/</LookFor>  
  <SendTo>~/test.aspx?id=$1</SendTo>  
  </RewriterRule>  

  </Rules>  

  </RewriterConfig>  

同时还要在<system.web>配置节下加  
  <httpHandlers>  
  <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />  
  <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />  
  <add verb="*" path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />  

  </httpHandlers>  

3.好了,基本上就可以了,但是还有重要一点千万不要忘了  
以上有三种情况的url生成  
针对第一种情况,第一第二步配置完就可以实现了  
可对第二种和第三种url情况,还需要进行一下配置  
先说第二种情况:因为咱们重写的是.html后缀  
所以需要在iis中进行.html映射,方法如下:  
右击站点-属性-主目录-配置  
在打开页面找扩展名.aspx,双击之后弹出窗口内复制可执行文件  
一般是C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll  
复制完之后点添加在弹出窗口把内容复制到可执行文件  
扩展名.html当然这个你可以任意写了,不过要和  
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />  
保持一致.  
同时去掉确认文件是否存在,确定即可  
完成之后输入http://localhost:2001/1/a.html  
是不是就可以访问了?爽吧  

下面介绍第三种情况,生成目录  
这里面稍微有点复杂,同样配置iis  
还是在那个弹出窗口,点插入  
把复制的文件即C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll  
复制到可执行文件框内,同时去掉确认文件是否存在,确定即可  
这样输入http://localhost:2001/1/,是不是就可以访问了?嘿嘿  
可能读者会有疑问了:现在设置的这个和第二种设置的有什么区别?  
现在设置的其实是进行*映射,即把所有的文件都进行url重写处理程序处理  
这时其实就可以把.html 以及自带的.aspx等映射去掉,同样可以生成.html/.aspx/ url  
好了,如果还想其他的扩展大家就尽情扩展吧。  

4.现在再讲一下*映射要注意的问题  
因为*映射是把所有的文件都要交给url称谢程序去处理,这样就会造成会把站点下的图片以及css  
或者一些下载的rar等文件都要去处理,这样会慢吗?答案是毫无疑问的,肯定会增加内存的,  
单单一网站的图片以及上传的图片就足以让程序减慢成倍的速度了。  
那有什么办法进行处理吗?  
当然,我们可以进行以下处理就可以把速度还原了:  
方法1,把存放图片所在的文件夹转化成一个虚拟目录,在然后移处该虚拟目录*.*的映射,这样一来他的url重写程序就不会去处理图片文件,当然存放别的不需要url重写程序的文件也要象图片文件夹做类似的处理。  
虚拟目录设置办法:在iis站点右击目录点属性,目录-点创建  
然后点配置,在弹出窗口内删除:通配符应用程序映射(执行顺序)下添加的*.*的映射即可。  
方法2,把不需要*.*映射的文件夹设置新站点和原来的站点分开,这样在原来的站点访问的时候用  
新站点的域名即可。比如把图片设置站点http://images.ziuziu.cn,这样在http://ziuziu.cn站点访问图片的时候就必须使用http://images.ziuziu.cn/名称.gif,这样就避免了所有问件处理。  
以上两种方法即可提高不少速度了,当然第一种药方便的多。  

5.最后处理回发的情况大家可以在网上搜下即可。  

对于ASPX页面,我们在客户端查看代码时会发现,它自动为form加入了action,并且地址就是开头所说的原始页面地址。而对于ASPX页面,若当它的action为空时也就将回发到当前地址。这样我们就可以通过在客户端清除action的方法,来实现回发后继续保持有地址。  

在页面中加入以下代码即可:  
<script type="text/javascript">try{document.forms[0].action=""}catch(ex){}</script>  
如果有form的页面,就把上面代码加入<form></form>中,如果是用户控件就直接加到页面里面即可  
此种方法最简单最使用,已经过测试  



环境:Microsoft .NET Framework SDK v1.1  
OS:Windows Server 2003 中文版
ASP.Net生成静态HTML页
在Asp中实现的生成静态页用到的FileSystemObject对象!
在.Net中涉及此类操作的是System.IO  
以下是程序代码 注:此代码非原创!参考别人代码
//生成HTML页
  public static bool WriteFile(string strText,string strContent,string strAuthor)  
  {
  string path = HttpContext.Current.Server.MapPath("/news/");
  Encoding code = Encoding.GetEncoding("gb2312");
  // 读取模板文件
  string temp = HttpContext.Current.Server.MapPath("/news/text.html");
  StreamReader sr=null;
  StreamWriter sw=null;
  string str="";  
  try
  {
  sr = new StreamReader(temp, code);
  str = sr.ReadToEnd(); // 读取文件
  }
  catch(Exception exp)
  {
  HttpContext.Current.Response.Write(exp.Message);
  HttpContext.Current.Response.End();
  sr.Close();
  }
   
   
  string htmlfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+".html";
  // 替换内容
  // 这时,模板文件已经读入到名称为str的变量中了
  str =str.Replace("ShowArticle",strText); //模板页中的ShowArticle
  str = str.Replace("biaoti",strText);
  str = str.Replace("content",strContent);
  str = str.Replace("author",strAuthor);
  // 写文件
  try
  {
  sw = new StreamWriter(path + htmlfilename , false, code);
  sw.Write(str);
  sw.Flush();
  }
  catch(Exception ex)
  {
  HttpContext.Current.Response.Write(ex.Message);
  HttpContext.Current.Response.End();
  }
  finally
  {
  sw.Close();
  }
  return true;

此函数放在Conn.CS基类中了
在添加新闻的代码中引用 注:工程名为Hover
  
  if(Hover.Conn.WriteFilethis.Title.Text.ToString),this.Content.Text.ToString),this.Author.Text.ToString)))
  {
  Response.Write("添加成功");
  }
  else
  {
  Response.Write("生成HTML出错!");
  }
-------------------------------------------------------------------------
模板页Text.html代码
-------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
 <HEAD>
  <title>ShowArticle</title>
   
 <body>

 biaoti
 <br>
 content<br>
 author
 </body>
</HTML>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值