博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【思路】-URL重写
阅读量:6426 次
发布时间:2019-06-23

本文共 1129 字,大约阅读时间需要 3 分钟。

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|
也就是StartsWith  就应用301的函数
总结:URL的重写需要把握以上几个关键点,所以请思考
URL重写本质是什么?就是将一条请求路由到我们想路由的处理程序当中去
URL重写入口点在哪里?app.Request.Path 获得拦截的所有请求
URL重写是怎么识别判断的?通过正则表达式
重写后的参数处理
重写的url如果携带参数? 还是通过app.Request.Path
如何从lockfor中也就是重写的url中分离出请求相关的参数呢?
使用正则表达式的Replace函数,来做参数的分离,这个地方是个关键的地方
扩展1
301转发:系统拦截了所有的请求之后,那就可以对请求做任意的转发
扩展2
实现子目录的重写【思考中。。。】
主要的思路都清楚,但是有些细节的地方还不是特别的清楚

转载于:https://www.cnblogs.com/Sky-cloudless/p/4659a9efec4bc10232db9458c0aa0225.html

你可能感兴趣的文章
java.util.concurrent.atomic.AtomicInteger 源码
查看>>
Ceph 靠什么颠覆传统企业级存储
查看>>
eclipse 离线安装svn
查看>>
方法重写与方法重载的区别
查看>>
盘点机的主要作用在于数据采集
查看>>
Docker 容器简介
查看>>
论文发表的大概流程
查看>>
Mac专业的字体管理工具——“FontExplorer X”
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Nagios 监控windows服务器
查看>>
jstatd--收集远程主机信息
查看>>
objective-c ——代码块
查看>>
Lync Server 部署之后端服务器部署
查看>>
Server 2008r2 安装额外域控之RODC
查看>>
SecureCRT for Ubuntu12.04 使用方法
查看>>
9.MyBatis 关联映射(多对多)
查看>>
DDOS
查看>>
高性能大并发server的基础
查看>>
我的友情链接
查看>>