明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

asp.net 用伪静态---修改webconfig配置文件 .

Posted on 2011-09-18 20:32  且行且思  阅读(4342)  评论(0编辑  收藏  举报

    使用rewrite在iis上设置规则来实现伪静态,这样在vs中开发的时候将无法调试,必须要是用iis发布才不会造成找不到文件的错误,当然,肯定还有其他的方法来实现伪静态的,不用再iis中设置任何的东西,只需要一个。net的组件和设置一下webconfig文件就ok了,来看一下,这东西,我用的次数很少,每次用都怕忘记,所以记录下来,下次忘记的话也不用Google啦

      这回的准备工作,你必须去网上download一个URLRewriter.dll组件了,网上貌似有这个类库的源代码,当然里面也有编译好的dll文件,只需要把dll文件coty到自己站点的Bin下面,然后在网站上右键,添加引用,浏览选择这个dll文件即可。

     下面就需要在webconfig里面配置一番了

     1、在Web.Config的<system.web>和</system.web>添加以下节点:
    <httpModules> 
      <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" /> 
    </httpModules> 

    2、在Web.Config的<configuration>和</configuration>添加以下节点:


<configSections>  
  <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />  
</configSections>  
  
 <RewriterConfig>
  <Rules>
   <RewriterRule>
    <LookFor>~/Default/.html</LookFor>
    <SendTo>~/Default.aspx</SendTo>
   </RewriterRule>
   <RewriterRule>
    <LookFor>~/Detial_([0-9]*)/.html</LookFor>
    <SendTo>~/Detial.aspx?Id=$1</SendTo>
   </RewriterRule>
   <RewriterRule>
    <LookFor>~/List_p([0-9]*)/.html</LookFor>
    <SendTo>~/List.aspx?page=$1</SendTo>
   </RewriterRule>
   <RewriterRule>
    <LookFor>~/Double_t([0-9]*)_p([0-9]*)/.html</LookFor>
    <SendTo><!--[CDATA[~/Double.aspx?type=$1&page=$2]]--></SendTo>
   </RewriterRule>
   <RewriterRule>
    <LookFor>~/About_(.*)/.html</LookFor>
    <SendTo>~/About.aspx?title=$1</SendTo>
   </RewriterRule>
  </Rules>
 </RewriterConfig>

设置完以上两个步骤,就基本可以运行了,其中<RewriterRule/>标签里面就是重写的一个模块,<LookFor/>里面的是重写后的地址,而<SendTo/>则是原地址。大家应该注意到了我写了2组<RewriterRule/>,其中第一组的是给单参数的地址用的,而另一组是给多参数动态文件用的。

   相信大家如果用过在iis里面配置伪静态规则的话,那在webconfig里面配置规则自然不在话下,如果不会的话,就去找一些正则表达式的书看一下,不需要很精通就行

  当然此方法有一些注意事项:
1.不能使用Windows身份验证用户权限. 应使用Form验证,在web.config配置为:<authentication mode="Forms" />
2.使用Request.ServerVariables["script_name"]获得的路径仍然是:ShowPlay.asp?vid=1
3.被重写的地址如果回发,重写将失效 显示的地址将是ShowPlay.asp?vid=1
4. 后缀名必须为.aspx.如果是其他自定义后缀名,如.net  请在iis将.net映射到aspnet_isapi.dll.

 

五个页面

About.aspx

    <form id="form1" runat="server">
        <div>
    这是Aboutl页,url是About.aspx还是About.html?<br/>
    
    <br/>
    <br/>
    <a href="Default.html" mce_href="Default.html">主页</a>
    <br />
    <br />
    <a href ="List_p1.html">List页传page参数</a>
    <br />
    <br />
    <a href ="Detial_1.html">Detial页传值Id参数</a>
        <br />
    <br />
    <a href ="About_jianjie.html">About页传值title参数</a>
       <br />
    <br />
    <a href ="Double_t1_p1.html">Double页传值type和page参数</a>
         <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </div>
    </form>

cs代码:

//About页面
public partial class About : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string title = Request["title"].ToString();
        TextBox1.Text = "name为" + title;
    }
}
//Detial页面
public partial class Detial : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string Id = Request["Id"].ToString();
        TextBox1.Text = "Id号为" + Id;
    }
}
//Double.aspx页面
public partial class Double : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string type = Request["type"].ToString();
        string page = Request["page"].ToString();
        TextBox1.Text = "type为:" + type + "page为" + page;
    }
}
//List.aspx页面
public partial class List : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string page = Request["page"].ToString();
        TextBox1.Text = "页数为" + page;
    }
}