ASP.NET伪静态

转载之:http://www.cnblogs.com/Simcoder/archive/2010/10/25/1860644.html

1.伪静态:http://www.cnblogs.com/Default.html  目的就是为了赢得更多的收入,至于真否,待SEOer 解答,正如文字所说,伪静态就是假的静态。

2.准备工作:下载UrlRewrite /Files/Simcoder/URLRewriter.rar  将它放在应用程序bin目录下并引用。

3.配置 IIS 选择主目录 然后 点击配置

找到 “编辑”

找到“插入”:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_isapi.dll 在C盘找到 aspnet_isapi.dll 文件

去掉 确认文件是否存在 下面也是找到该aspnet_isapi.dll 文件 去掉 确认文件是否存在 然后扩展名改为:.html

这些都很简单关键在配置,在网上看了一些资料,越看越迷糊,算了自己搞吧。

4.不得不承认还是得啰嗦和他们一样的: **** ****之间就是需要 复制的代码了

 代码
<? xml version="1.0" encoding="utf-8" ?> 
< configuration > 
    
 < configSections >
    <!-- ********************************************************************************  --> 
         < section  name ="RewriterConfig"  type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"   />
    <!-- ********************************************************************************  --> 
      </ configSections >   
     < system.web > 

       < httpHandlers > 
        
 < remove  verb ="*"  path ="*.asmx" />    
  <!-- ********************************************************************************  --> 
           < add  verb ="*"  path ="*.aspx"  type ="URLRewriter.RewriterFactoryHandler, URLRewriter" /> 
          
 < add  verb ="*"  path ="*.html"  type ="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    <!-- ********************************************************************************  --> 
             </ httpHandlers > 
      
 < httpModules > 
        
 < add  name ="ScriptModule"  type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      
 </ httpModules > 
    
 </ system.web > 
    
 <!-- ********************************************************************************  --> 
    
 < RewriterConfig > 
        
 < Rules > 
            
 < RewriterRule > 
                
 < LookFor > ~/index.html </ LookFor > 
                
 < SendTo > ~/index.aspx </ SendTo > 
            
 </ RewriterRule > 
     </ RewriterConfig > 
    
 <!-- ********************************************************************************  --> 
</ configuration > 

 5.事先在index.aspx页面做好标记,比如Helloworld!打开首页 http://localhost/index.html   发现实际运行的是index.aspx页面

这就是简单的伪静态了。

6.正则表达式:

  < RewriterRule > 
    
 < LookFor > ~/(.*).html </ LookFor > 
    
 < SendTo > ~/$1.aspx </ SendTo > 
 
 </ RewriterRule >        

 (.*):应用于根目录下所有页面;

$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 >

如果你的文本含有大量的"<" 或"&"字符—就象程序码中经常的那样 — XML元素可以被定义为一个CDATA部分。

还有一个需要注意的是:

url路径匹配的时候,当找到第一个匹配的就不会再匹配第二个。

如根目录index.html 会 匹配: < LookFor > ~/(.*).html </ LookFor >  就不在匹配其他节点。不清楚的可参考URL路由。

所以在配置的时候需要注意各个节点的优先,比如< LookFor > ~/(.*).html </ LookFor >  我就将它放在配置文件最后一个,

因为他匹配所有目录下的文件。全部配置如下:

 代码

    
 < RewriterConfig > 
        
 < Rules > 
            
 < RewriterRule > 
                
 < LookFor > ~/productclass-(.[0-9][0-9][0-9]*).html </ LookFor > 
                
 < SendTo > <![CDATA[ ~/productclass.aspx?cn=$1 ]]> </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/productclass-(.*)-(.*).html </ LookFor > 
                
 < SendTo > <![CDATA[ ~/productclass.aspx?cn=$1&p=$2 ]]> </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/newsinfo-(.*).html </ LookFor > 
                
 < SendTo > <![CDATA[ ~/newsinfo.aspx?n=$1 ]]> </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/newsinfo-(.*)-(.*).html </ LookFor > 
                
 < SendTo > <![CDATA[ ~/newsinfo.aspx?cn=$1&pn=$2 ]]> </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/ProductClassList-(.*)-(.*)-(.*)-(.*).html </ LookFor > 
                
 < SendTo > <![CDATA[ ~/productclasslist.aspx?cn=$1&c=$2&p=$3&s=$4 ]]> </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/ProductClassList-(.[0-9][0-9][0-9]*)-(.*).html </ LookFor > 
                
 < SendTo > <![CDATA[ ~/productclasslist.aspx?cn=$1&c=$2 ]]> </ SendTo > 
            
 </ RewriterRule > 
           
            
 < RewriterRule > 
                
 < LookFor > ~/product_detal-(.*)-(.*).html </ LookFor > 
                
 < SendTo > <![CDATA[ ~/product_detal.aspx?cn=$1&pn=$2 ]]> </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/product-(.*)-(.*).html </ LookFor > 
                
 < SendTo > <![CDATA[ ~/product.aspx?cn=$1&c=$2 ]]> </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/User/(.*).html </ LookFor > 
                
 < SendTo > ~/User/$1.aspx </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/about/(.*).html </ LookFor > 
                
 < SendTo > ~/about/$1.aspx </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/NewPro-(.*).html </ LookFor > 
                
 < SendTo > ~/NewPro.aspx?p=$1 </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/prosearch-(.*).html </ LookFor > 
                
 < SendTo > ~/prosearch.aspx?key=$1 </ SendTo > 
            
 </ RewriterRule > 
            
 < RewriterRule > 
                
 < LookFor > ~/(.*).html </ LookFor > 
                
 < SendTo > ~/$1.aspx </ SendTo > 
            
 </ RewriterRule >            
        
 </ Rules > 
    
 </ RewriterConfig > 
</ configuration >

$1:对应第一个(.*)

$2:对应第二个(.*)

$3:对应第三个(.*)

$4:对应第四个(.*)

...依次类推

然后就是页面连接的更改,将aspx更改为html,如果有带参数的或者分页,我是直接在文件名 加"-"分隔参数;

 Request.CurrentExecutionFilePath.Substring(0, Request.CurrentExecutionFilePath.LastIndexOf("aspx"))+"-参数-参数-参数...."+".html";

这种办法不适合做大型项目,不过小项目很快就能完成,尤其是已经做好的网站只需半天或一天就修改完成了。

原文地址:https://www.cnblogs.com/tofight/p/3309275.html