URL重写 HttpModule进阶和dll重写

来源:互联网 发布:开罗宣言 知乎 编辑:程序博客网 时间:2024/05/05 22:19

 URL重写

URL重写,实质上是将网页真实的URL隐藏起来,使用户通过相应的虚拟URL访问网页资源,以弥补真是URL的许多不足

     好处:

        1.满足搜索引擎需要,实现搜索引擎中的排名优化


        很多搜索引擎不支持动态链接无法抓去动态网页,尤其是带“?”查询参数的网页,而且静态网页优先度高于动态网页


        2.隐藏网页实现技术,增强网页安全性


        如果网页上含jsp或aspx  制作网站的技术一目了然。但如果将页面重写  黑客将无法知晓网页技术,大大降低网页收到攻击的可能性


        3.提高网站的可用性和专业性


        太长的URL会给网站带来可用性问题


        4.使用URL支持“可删减”的需求


        很多搜索引擎不支持动态链接无法抓去动态网页,尤其是带“?”查询参数的网页,而且静态网页优先度高于动态网页


        如果网页上含jsp或aspx  制作网站的技术一目了然。但如果将页面重写  黑客将无法知晓网页技术,大大降低网页收到攻击的可能性



使用HttpModule实现URL重写

代码实例


<div>        <a href="goods_1.html">1</a>         <a href="goods_2.html">2</a>  </div>


namespace ch3{    public class GOODHT : IHttpModule    {        public void Dispose()        {            throw new NotImplementedException();        }        public void Init(HttpApplication context)        {            //请求处理之前触发的事件            context.BeginRequest += context_beginRequest;        }        void context_beginRequest(object sender,EventArgs e) {            HttpApplication app = sender as HttpApplication;            //获取请求的原始的URL            string url = app.Request.RawUrl;            //正则表达式:.../goods_1.html            Regex regex = new Regex(@"\w+_\d+\.html");            if (regex.IsMatch(url))            {                //如果符合格式,则需要进行URL重写                //截取URL中的编号                int line = url.LastIndexOf("_");                int dot = url.LastIndexOf(".");                string id = url.Substring(line + 1, dot - line - 1);                //拼接真实的URL                string dcURL = "Good.aspx?id=" + id;                //跳转 Server.Transfer                app.Server.Transfer(dcURL);            }        }    }}

//节点配置

<system.webServer>     <modules>      <add name="url" type="ch3.GOODHT"/>    </modules>  </system.webServer>



使用URLRewriter.dll实现URL重写

只要在Web.config文件中添加URL重写规则    

        1.下载URLRewriter.dll  
        下载地址 http://download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cg/MSDNURLRewriting.nsu
        

        2.在网站中添加引用URLRewriter.dll


        3.在网站中添加页面


        4.web.config文件中配置使用URLRewriter.dll


          将configSections节点作为configuration的第一个子节点进行添加


          用于指定配置节RewriterConfig的处理程序类的名称为URLRewriter.Config.Rewriter.ConfigSerializerSectionHandler


          将所有扩展名为.html文件的HTPP请求映射到类 URLRewriter.RewriterFactoryHandler中添加规则



代码示例

       
 <div>        <a href="goods_1_45.html">1</a>       </div>


节点配置

  <!--dll重写URL 必须放低一个-->  <configSections>    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />  </configSections>  <!--规则-->  <RewriterConfig>    <Rules>      <RewriterRule>        <LookFor>~/goods_(\d)+\.html</LookFor>        <SendTo>~/Good.aspx?id=$1</SendTo>      </RewriterRule>      <RewriterRule>        <LookFor>~/goods_(\d)_(\d+)+\.html</LookFor>        <SendTo>~/Good.aspx?id=$1&id2=$2</SendTo>      </RewriterRule>    </Rules>  </RewriterConfig>    <system.webServer>    <handlers>      <add verb="*"  path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter" name ="urlrewriter"/>    </handlers>  </system.webServer>


实现多个参数URL重写
        多个参数用&amp;间隔   (URL中连接多个参数&)取值为()里面的值

例如

<LookFor>~/goods_(\d)_(\d)+\.html</LookFor><SendTo>~/Good.aspx?id=$1&pwd=$2</SendTo>



0 0
原创粉丝点击