zoukankan      html  css  js  c++  java
  • 还是关于url重写的研究

    如果想详细了解URL重写,可以访问: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true

    方法一:

    通过实现接口“IHttpHandler”来接管HTTP请求,Follow me!

    1.在资源管理方案中添加一个类,类的代码如下:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    /// <summary>
    /// UrlRewriter URL重写类
    /// Author:yoyo
    /// blog:http://yangmingsheng.cn
    /// </summary>
    public class UrlRewriter : IHttpHandler  //实现“IHttpHandler”接口
    {
        
    public UrlRewriter()
        {
            
    // TODO: 在此处添加构造函数逻辑
        }
        
    public void ProcessRequest(HttpContext Context)
        {
            
    try
            {
                
    //取得原始URL屏蔽掉参数
                string Url = Context.Request.RawUrl;
                
    //建立正则表达式
                System.Text.RegularExpressions.Regex Reg = new System.Text.RegularExpressions.Regex(@"/show-(\d+)-(\d+)\..+", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                
    //用正则表达式进行匹配
                System.Text.RegularExpressions.Match m = Reg.Match(Url, Url.LastIndexOf("/"));//从最后一个“/”开始匹配
                if (m.Success)//匹配成功
                {
                    
    //Context.Response.Write(@"~/aspx/show.aspx?type=" + m.Groups[1] + "&id=" + m.Groups[2]);
                    Context.RewritePath(@"~/aspx/show.aspx?type=" + m.Groups[1+ "&id=" + m.Groups[2]);//重写路径
                }
                
    else
                {
                    Context.Response.Redirect(Context.Request.Url.ToString());
                }
            }
            
    catch
            {
                Context.Response.Redirect(Context.Request.Url.ToString());
            }

        }
        
    /// <summary>    
        
    /// 实现“IHttpHandler”接口所必须的成员    
        
    /// </summary>    
        
    /// <value></value>    
        
    /// Author:yoyo
        public bool IsReusable
        {
            
    get { return false; }
        }

    }

    2.在web.config文件还要添加一下设置项

    <httpHandlers>
    <add verb="*" path="*/show-?*-?*.aspx" type="UrlRewriter" />
    </httpHandlers>

    解释一下:
    verb是指允许的动作“GET”、“POST”、“PUT”中的一种或几种,星号“
    *”表示全部允许;
    path是指匹配路径,支持简单的通配符;
    type是指绑定的类名以及包括命名空间(如果有的话);
    对了,首先你要建立一个WEB窗体“show.aspx”在目录“aspx”下,因为这个文件就是实际接受请求并显示相关内容的页面。
    OK!,编译,打开网站输入地址http:
    //localhost:80/show-12-34.aspx 访问一下,检查看是不是显示的“/aspx/show.aspx?type=12&id=34”的内容呢?!
    上面我是设置了匹配ASPX文件,因为IIS里.HTML扩展名默认是不归ASP.NET接管的,如果要接管HTML请求,请将IIS的扩展名.HTML映射到“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll”,然后将上面的aspx改成html:
    <add verb="*" path="*/show-?*-?*.html" type="UrlRewriter" />
    现在打开网站输入地址http:
    //localhost:80/show-12-34.html 访问一下~!


    以上内容转自(http:
    //yangmingsheng.cn,作者:YoYo)

    方法二:

    .net 实现 URL重写,伪静态

    Code

    </system.web>
    </configuration>

    这里简单介绍一下:

    <RewriterConfig>
       
    <Rules>
       
    <RewriterRule>
          
    <LookFor>要查找的模式</LookFor>
          
    <SendTo>要用来替换模式的字符串</SendTo>
       
    </RewriterRule>
       
    <RewriterRule>
          
    <LookFor>要查找的模式</LookFor>
          
    <SendTo>要用来替换模式的字符串</SendTo>
       
    </RewriterRule>
       
    </Rules>
    </RewriterConfig>

    httpHandlers的设置主要是配合IIS将请求重新定义处理,这里也比较关键,如果不存在合理的httpHandlers,那么,访问肯定会失败的。

    关于正则表达式,可以到百度里搜索:
    "常用正则表达式",会有很多。

    五.配置IIS解析.html文件
    右键点我的电脑
    -->管理-->展开'服务和应用程序'-->internet信息服务-->找到你共享的目录-->右键点击属性 -->点击'配置'-->映射下面 -->找到.aspx的可执行文件路径 复制路径    然后要做的就是建立或者修改htm的映射:粘贴路径-->扩展名为".html"-->然后把检查文件是否存在的勾去掉这样就可以了。

    刚刚做项目的时候采用了第二种方法,遇到了一个问题,就是已存在的htm文件无法访问,提示

    没有为扩展名“.htm”注册的生成提供程序

    查了一下资料,修改webconfig的配置搞定了。

    <compilation 
    节点下增加:
          <buildProviders
    >
            
    <add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
          
    </buildProviders>
    即可!

    <!-----------end-------------->

    附:关于回发 地址的问题  请参考:

    http://www.cnblogs.com/zhangsir/archive/2008/09/23/1297189.html 

  • 相关阅读:
    Maidsafe-去中心化互联网白皮书
    The Top 20 Cybersecurity Startups To Watch In 2021 Based On Crunchbase
    Top 10 Blockchain Security and Smart Contract Audit Companies
    The 20 Best Cybersecurity Startups To Watch In 2020
    Blockchain In Cybersecurity: 11 Startups To Watch In 2019
    004-STM32+BC26丨260Y基本控制篇(阿里云物联网平台)-在阿里云物联网平台上一型一密动态注册设备(Android)
    涂鸦开发-单片机+涂鸦模组开发+OTA
    000-ESP32学习开发-ESP32烧录板使用说明
    03-STM32+Air724UG远程升级篇OTA(阿里云物联网平台)-STM32+Air724UG使用阿里云物联网平台OTA远程更新STM32程序
    03-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32+Air724UG实现利用http/https远程更新STM32程序(TCP指令,单片机程序检查更新)
  • 原文地址:https://www.cnblogs.com/zhangsir/p/1433935.html
Copyright © 2011-2022 走看看