URL重写 

重写原理
过程分析
疑惑地方
lookfor app.Request.ApplicationPath如果有子目录的话 这个地方可能会起到作用,暂时不确定
bool flag = url.IndexOf('.') != -1; 标记,表示如果请求后缀包含“.”的我们才进行重写的执行

主要思路:使用筛选器拦截系统所有的请求,
第一步:去除掉不需要重写的请求
第二步:加载系统的重写配置规则
第三步:循环遍历每条规则,如果匹配使用系统的context.RewritePath函数将拦截的请求,转发到我们指定的ashx处理程序当中去
lookfor 到 sendto
注意地方
如何获得系统所有的请求呢?
使用app.Request.Path 【获取当前请求的虚拟路径】表示所用的来到系统当中的请求,通过识别这个值来断定请求是否转发
使用这个还有一个好处,它不带域名,可以实现二级域名的转发操作
循环判断每条规则
每一个请求到达系统当中,都需要匹配每一条规则,每次切换规则,都需要用正则表达式一个实例对象,一旦匹配成功直接跳出循环,这里是比较好性能的地方
正则注意点
完全匹配 ^$ 注意这两个符号,表示来完全匹配一个请求的虚拟路径,上面提到的Path
301的实现
301用来将非www的链接,重定向到www上面去,注意不仅仅是首页的非www跳转
是全站的跳转,所以这个地方的要求就在于必须在for规则循环判断里面写
实现的关键点是app.Request.Url.AbsoluteUri.ToLower(),识别这个绝对url,如果绝对url里面包含一条规则
http://abc.com|http://www.abc.com
也就是StartsWith http://abc.com 就应用301的函数
总结:URL的重写需要把握以上几个关键点,所以请思考
URL重写本质是什么?就是将一条请求路由到我们想路由的处理程序当中去
URL重写入口点在哪里?app.Request.Path 获得拦截的所有请求
URL重写是怎么识别判断的?通过正则表达式
重写后的参数处理
重写的url如果携带参数? 还是通过app.Request.Path
如何从lockfor中也就是重写的url中分离出请求相关的参数呢?
使用正则表达式的Replace函数,来做参数的分离,这个地方是个关键的地方

扩展1
301转发:系统拦截了所有的请求之后,那就可以对请求做任意的转发
扩展2
实现子目录的重写【思考中。。。】
主要的思路都清楚,但是有些细节的地方还不是特别的清楚

【思路】-URL重写的更多相关文章

  1. Struts2进行url重写

    一般来说我们在用Struts2进行开发的时候我们的访问url都是带上一些类似于.action或者.do还有用?传递参数,这种访问方式与静态页面的访问相比,我就可以用一些开源的组件来进行url的重写,以 ...

  2. Url Rewrite 再说Url 重写

    前几天看到园子里一篇关于 Url 重写的文章<获取ISAPI_Rewrite重写后的URL>, URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次.搜索 ...

  3. URL重写与URL路由

    要介绍这两个内容,必须要从ASP.NET管线说起. ASP.NET管线 管线(Pipeline)这个词形象地说明了每个Asp.net请求的处理过程: 请求是在一个管道中,要经过一系列的过程点,这些过程 ...

  4. nginx反向代理+负载均衡+url重写+ssl认证

      Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄 ...

  5. (转)nginx下基于ThinkPHP框架的网站url重写

    nginx下基于ThinkPHP框架的网站url重写nginx下的基于thinkphp的应用的url重写,需了解thinkphp的各种url格式参数的处理逻辑以及nginx重写的原理.简单点说,无论哪 ...

  6. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  7. 用.htaccess文件实现URL重写

    注:第一部分来自 http://www.cnblogs.com/wangkongming/archive/2012/11/13/2768251.html     这位博主的个人网站简洁   还有诗歌  ...

  8. ASP.NET Core中使用URL重写

    ASP.NET Core 1.1 Preview 1 中新增了 URL Rewriting middleware ,终于可以进行 URL 重写了,实际使用体验一下. 首先要将 ASP.NET Core ...

  9. 微软的坑:Url重写竟然会引起IIS内核模式缓存不工作

    万万没有想到!当初为了解决使用负载均衡时记录客户端IP地址的问题,在IIS URL Rewrite Module中增加了一条URL重写规则(详见迁入阿里云后遇到的Request.UserHostAdd ...

随机推荐

  1. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  2. USB OTG插入检测识别

    转载请标注原文地址:http://blog.csdn.net/uranus_wm/article/details/9838847 一 USB引脚一般四根线,定义如下: 为支持OTG功能,mini/mi ...

  3. EX14 彩票中奖 (lottery.pas/c/cpp)

    [题目描述]小明想试试运气去购买彩票,所以他开始研究彩票大乐透的玩法:超级大乐透是指由购买者从01—35共35个号码中选取5个号码为前区号码,并从01—12共12个号码中选取2个号码为后区号码组合为一 ...

  4. widgets、dialogs与自动连接(auto-connect)

    QMetaObject的自动连接设施(auto-connect facilities)可以自动将槽与信号连接起来,只需要声明和定义一个符合标准命名规则的槽函数 void on_<object n ...

  5. linux下与windows下的换行符

    [原文有些许错误,已作了修改] 回车符号和换行符号产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别.在计算机还没有出现之前,有一种叫做电传 ...

  6. MySQL环境部署

    阅读目录: 1.Windows下安装MySQL 2.Linux下安装MySQL 序章: MySQL是个小型的数据库,用来自己做小项目,做学习练习什么的再适合不过了,不过新手总会被一些莫名奇妙的问题难住 ...

  7. IOS 微信 6.5.2 自动播放音乐 解决方案

    之前仅仅是IPhone7\7p 的问题,现在已经扩展到6 .6s.今天在下也行了最新微信,音乐问题果然来了. 好了 下面直接进入正题 首先 引入 <script src="http:/ ...

  8. Maven打包程序

    1.src/main目录下建立scritps.config.assembly目录 scritps:存放脚本文件如批处理 assembly:打包配置文件   2.assembly目录下建立package ...

  9. apache 局域网访问

    很多的朋友都想把自己的电脑打造为服务器使别人能够访问.比如说你自己写了一网站,只能自己通过localhost访问或127.0.0.1访问.但是怎么让别人的电脑也能访问呢?来看看自己写的网站.现在我来讲 ...

  10. iOS runloop初步学习

    参考: http://www.aichengxu.com/view/43297111. 定义:其实它内部就是do-while循环,在这个循环内部不断地处理各种任务(比如Source.Timer.Obs ...