当前位置: 首页 > news >正文

【思路】-URL重写

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
实现子目录的重写【思考中。。。】
主要的思路都清楚,但是有些细节的地方还不是特别的清楚


来自为知笔记(Wiz)


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

相关文章:

  • 看完深入浅出的Javascript,简单写下
  • js封装加减乘除四则运算解决精度丢失的问题
  • 必填校验 验证问题
  • SCCM部署先决条件
  • 3 kafka介绍
  • 前端 map方法 解决扁平数据结构转Tree
  • ***测试-HTTP方法
  • Android单元测试 - 几个重要问题
  • 封装 后台返回列表中不同状态展示不同数据颜色
  • javaWeb 在jsp中 使用自定义标签输出访问者IP
  • join 拼接 方法
  • js 获取数组对象中的最后一项展示
  • 使用Git的Push出现rejected - non-fast-forward错误
  • CSS 相邻元素选择器
  • 设计模式——装饰者模式:婚纱照收费的简单实现
  • [ JavaScript ] 数据结构与算法 —— 链表
  • Apache Pulsar 2.1 重磅发布
  • canvas绘制圆角头像
  • css布局,左右固定中间自适应实现
  • flask接收请求并推入栈
  • HTTP那些事
  • Invalidate和postInvalidate的区别
  • js数组之filter
  • NSTimer学习笔记
  • PAT A1050
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 软件开发学习的5大技巧,你知道吗?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 说说动画卡顿的解决方案
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​Python 3 新特性:类型注解
  • ​香农与信息论三大定律
  • #AngularJS#$sce.trustAsResourceUrl
  • (02)Hive SQL编译成MapReduce任务的过程
  • (1) caustics\
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)kafka实战——kafka源码编译启动
  • (转)c++ std::pair 与 std::make
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***利用Ms05002溢出找“肉鸡
  • .NET Core WebAPI中封装Swagger配置
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [20150321]索引空块的问题.txt
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [C++] sqlite3_get_table 的使用