• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • asp.net 1.1中url重寫的問題

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    1:asp .net 1.1中重寫中可刪節的問題?。?! 如以下的正則表達式: Rules RewriterRule LookFors LookFor~/(\d{4})/(\d{2})\.html/LookFor---------1 LookFor~/(\d{4})/(\d{2})//LookFor--------------2 LookFor~/(\d{4})/(\d{2})/LookFor-----------3 LookF

    1:asp.net1.1中重寫中可刪節的問題?。?!

    如以下的正則表達式:

    <Rules>
      <RewriterRule>
        <LookFors>
          <LookFor>~/(\d{4})/(\d{2})\.html</LookFor>---------<1>
          <LookFor>~/(\d{4})/(\d{2})/</LookFor>--------------<2>
          <LookFor>~/(\d{4})/(\d{2})</LookFor>-----------<3>
          <LookFor>~/(\d{4})/(\d{2})/index.html</LookFor>----<4>
        </LookFors>
        <SendTo>~/Pro.aspx?year=$1&amp;month=$2</SendTo>
      </RewriterRule>
     </Rules>

    其中的1,4可以正常映射到對應的頁面

    可2,3則會出現http404錯誤?。?!

    其原因在于IIS本身的處理流程,解決辦法則是在網站自己重寫404處理錯誤?。?!

    1:自定義處理404錯誤的URL(在IIS中配置,在web.config中的配置對重寫無用)

    2:在System.Web節中添加如下節:

    <httpHandlers>
       
              <add verb="*" path="404.aspx" type="lt.Http404,lt"></add>
       </httpHandlers>
       <httpModules>
      <add type="lt.ReWriteModule,lt" name="ModuleRewriter" />
     </httpModules>

    源代碼如下:

      public class Http404:System.Web.IHttpHandler
     {
      public Http404()
      {
       //
       // TODO: 在此處添加構造函數邏輯
       //
      }
      #region IHttpHandler 成員

      public void ProcessRequest(System.Web.HttpContext context)
      {
       // TODO:  添加 Http404.ProcessRequest 實現
       string errorPath=context.Request.RawUrl.Split(new char[]{@#;@#})[1];
       string appPath=context.Request.ApplicationPath;
       int ipos=errorPath.IndexOf(appPath);

       string  url=errorPath.Substring(ipos+appPath.Length );
    //   if(!url.EndsWith("/"))
    //   {
    //      url+="/";
    //   }
    //   url+="index.html";
    //   context.Response.Write(url);
    //   context.RewritePath(url);

       //context.Response.Write(url);
          url="~"+url;
       string newUrl =lt.ReWriteModule.GetUrl(context,url);
       //context.Response.Write(newUrl);
       if (newUrl != null)
       {
        //cxt.Response.Filter = new ResponseFilter(cxt.Response.Filter,cxt.Request.Path);
        context.Response.Write("請求的路徑:" + url);
        context.Response.Write("<BR>");
        context.Response.Write("轉向的目的URL:" + newUrl);
        context.Response.Write("<BR>");
        context.RewritePath(newUrl);
       }
       else
       {
        context.Response.Write("你請求的資源不存在??!");
        context.Response.End ();
       }
      }

      public bool IsReusable
      {
       get
       {
        // TODO:  添加 Http404.IsReusable getter 實現
        return false;
       }
      }

    ///////////////配置節處理中的httpModule如下:

    public class ReWriteModule:System.Web.IHttpModule
     {
      public ReWriteModule()
      {
       //
       // TODO: 在此處添加構造函數邏輯
       //
      }
      #region IHttpModule 成員

      public void Init(System.Web.HttpApplication context)
      {
       // TODO:  添加 ReWriteModule.Init 實現
       context.BeginRequest+=new EventHandler(this.ReWrite);
      }
      private static System.Xml.XmlDocument ruleDoc = null;
      private static System.Xml.XmlDocument GetRuleConfig(System.Web.HttpContext app)
      {
       if (ruleDoc == null)
       {
        ruleDoc = new System.Xml.XmlDocument();
        ruleDoc.Load(app.Server.MapPath("~/rule.xml"));
       }
       return ruleDoc;
      }
      public static string GetUrl(System.Web.HttpContext cxt,string path)
      {
           
       System.Xml.XmlDocument doc = GetRuleConfig(cxt);
       System.Xml.XmlNodeList lst= doc.GetElementsByTagName("RewriterRule");
       string pat="";
       foreach (System.Xml.XmlNode nd in lst)
       {
        System.Xml.XmlNodeList sub = nd.ChildNodes[0].ChildNodes;
        foreach(System.Xml.XmlNode chk in sub)
        {
         pat = "^" + chk.InnerText+"$";
         System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pat, System.Text.RegularExpressions.RegexOptions.Compiled | System.Text.RegularExpressions.RegexOptions.IgnoreCase);
         if(reg.IsMatch(path))
         {
          return reg.Replace(path, nd.ChildNodes[1].InnerText);
         }
        }
       }
       return null;

      }
      private void ReWrite(object sender,EventArgs e)
      {
       System.Web.HttpContext cxt =(sender as System.Web.HttpApplication).Context;
        
       if (cxt.Request.ContentType != "image/pjpeg")
       {
        string type = cxt.Request.ContentType.ToLower();
        string path = cxt.Request.Path;
        string apppath = cxt.Request.ApplicationPath;
        path = path.Remove(0, apppath.Length);
        path = "~" + path;
               
        string newUrl = GetUrl(cxt, path.TrimEnd().TrimStart());
        if (newUrl != null)
        {
         //cxt.Response.Filter = new ResponseFilter(cxt.Response.Filter,cxt.Request.Path);
         cxt.Response.Write("請求的路徑:" + path);
         cxt.Response.Write("<BR>");
         cxt.Response.Write("轉向的目的URL:" + newUrl);
         cxt.Response.Write("<BR>");
         cxt.RewritePath(newUrl);
                   
                   
                   
        }
        //else
        //{
        //    cxt.Response.Write(cxt.Request.Path + "<BR>");
        //    cxt.Response.Write("你請求的資源不存在或無權訪問!");
        //    cxt.Response.Flush();
        //    cxt.Response.End();
        //}
       }
      }
      public void Dispose()
      {
       // TODO:  添加 ReWriteModule.Dispose 實現
      }

      #endregion
     }

    ---------rule.xml的配置如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <Rules>
      <RewriterRule>
        <LookFors>
          <LookFor>~/(\d{4})/(\d{2})\.html</LookFor>
          <LookFor>~/(\d{4})/(\d{2})/</LookFor>
          <LookFor>~/(\d{4})/(\d{2})</LookFor>
          <LookFor>~/(\d{4})/(\d{2})/index.html</LookFor>
        </LookFors>
        <SendTo>~/Pro.aspx?year=$1&amp;month=$2</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFors>
          <LookFor>~/Pro.aspx?year=(\d{4})&amp;month=(\d{2})</LookFor>
        </LookFors>
        <SendTo>~/(\d{4})/(\d{2})\.html</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFors>
          <LookFor>~/pc</LookFor>
        </LookFors>
        <SendTo>~/Test2.aspx</SendTo>
      </RewriterRule>
      <RewriterRule>
        <LookFors>
          <LookFor>~/index.html</LookFor>
          <LookFor>~/default.html</LookFor>
        </LookFors>
        <SendTo>~/default.aspx</SendTo>
      </RewriterRule>
    </Rules>

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>