【思路】-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)

时间: 2024-10-11 11:37:39

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

Url Rewrite 再说Url 重写

前几天看到园子里一篇关于 Url 重写的文章<获取ISAPI_Rewrite重写后的URL>, URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次.搜索一下URL-Rewrite可以找到很多URL-Rewrite方面的文章和组件,自己以前也多次接触过这个东东,也来说说吧. ScottGu 有一篇非常经典的 URL-Rewrite Blog Tip/Trick: Url Rewriting with ASP.NET http://weblogs.asp.net

Struts2进行url重写

一般来说我们在用Struts2进行开发的时候我们的访问url都是带上一些类似于.action或者.do还有用?传递参数,这种访问方式与静态页面的访问相比,我就可以用一些开源的组件来进行url的重写,以实现伪静态,虽然这样对于访问速度并没有提高,但是有一个很明确的好处就是经过url重写的url是更有利于搜索引擎优化的,还有一个好处就是完全隐藏了一些action的结构,下面就让我们来看看怎么进行url的重写 首先,这要用到两个软件包,一个是SmartUrls(Struts2的插件,下载地址:http

Cento7+Nginx 之 URL重写

Cento7+Nginx  之  URL重写 我们前一篇文章写了一个Cento7+Nginx 反向代理实现多域名跳转,今天主要介绍一下Cento7+Nginx  之  URL重写, Hostname:A-S.IXMSOFT.COM IP:192.168.5.20 Role:Nginx server 我们首先准备安装Nginx仓库 Yum install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.

二:理解ASP.NET的运行机制(例:基于HttpHandler的URL重写)

url重写就是把一些类似article.aspx?id=28的路径重写成 article/28/这样的路径 当用户访问article/28/的时候我们通过asp.net把这个请求重定向到article.aspx?id=28路径有两种方法可以做这件事情 一:基于HttpModule的方案这个方案有有缺点,具体缺点以后再谈我曾写过一篇文章<不用组件的url重写(适用于较大型项目) >就是按这个模式写的 二:基于HttpHandler的方案我们这个例子就是按这个方案做的我们接下来就按这种方式做这个例

LNMP的搭建及URL重写测试

内容: 1.LNMP的搭建 2.搭建基于LNMP的discuz论坛(www.hill.com) 3.实现https 4.实现访问http时自动跳转至https以及防盗链设置.URL重写测试 一.LNMP的搭建 我们知道,在apache与php的结合方式有三种,而nginx与php的结合目前只有一种是行之有效的:php-fpm 1.yum直接安装快速搭建LNMP,官方下载nginx的预安装包(rpm包),当然也可以编译安装 #yum install -y prce-devel zlib-devel

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

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

Cookie / Session / URL重写

Cookie //创建一个Cookie对象 Cookie cookie = new Cookie("username","JACK"); //在客户端存储的时间(生命周期)单位是秒 7天 7*24*60*60 //如果这里设置为0 就表示客户端不保存该cookie 即临时cookie //如果设置为-1 就表示客户端关闭之后就删除该cookie 也可以称之为临时cookie cookie.setMaxAge(-1); //设置cookie在客户端存放的路径 如果不设

Session,Cookie,jsessionid,Url重写

在一些投票之类的场合,我们往往因为公平的原则要求每人只能投一票,在一些WEB开发中也有类似的情况,这时候我们通常会使用COOKIE来实现,例如如下的代码: < % cookie[]cookies = request.getCookies(); if (cookies.lenght == 0 || cookies == null){ doStuffForNewbie(); //没有访问过 }else{ doStuffForReturnVisitor(); //已经访问过了 } % > 这是很浅显

URL重写技术总结

概要:什么是url重写? URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.比如浏览器发来请求 hostname/101.html ,服务器自动将这个请求中定向为http://hostname/list.aspx ?id=101. url重写的优点在于: 1.缩短url,隐藏实际路径提高安全性. 2.易于用户记忆和键入. 3.易于被搜索引擎收录. 正文:实现url重写的基本方法: 一. 下载ms的URLRewriter.dll,放到你的web程序的bin下 下载地址1