URL重写

为什么要URL重写?

1、有利于SEO,带参数的URL由于内容可能是动态改变的,因此带参数的URL权重较低;

2、地址看起来更正规。

 

 

URL重写思路:每个浏览器端的URL请求都会首先触发Application_BeginRequest ,因此,我们可以在这个函数中取得用户浏览器传过来的URL,然后在这个函数中进行URL重写。

 

前台访问页面写法:

<a href='ViewArticle-<%#Eval("Id") %>.aspx'><%#Eval("Title") %></a>

 

从上句代码中可以得到浏览器中的URL形式为:http://localhost:4171/Art/ViewArticle-2.aspx

 

URL重写步骤:

第一步:通过HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath 获得用户要访问资源的虚拟路径

第二步:用HttpContext.Current.RewritePath(ReWriteUrl)进行重写,也就是把用户的URL请求(/Art/ViewArticle-2.aspx)交给另外一个页面(/View.aspx?id=2)处理。换句话说,就是把用户传过来的虚假的URL,转交给服务器中存在的真实的页面进行处理。

代码如下:

        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            //获得用户要访问的资源。这个属性获得的是虚拟路径
            string url = HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath;
            //判断用户访问的是否是/Art/ViewArticle-333.aspx格式
            Match match = Regex.Match(url, @"~/Art/ViewArticle-(\d+)\.aspx");
            if (match.Success)
            {
                //从正则表达式中获取文章的id
                string id = match.Groups[1].Value;
                //把客户端URL请求发给内部的其他页面
                HttpContext.Current.RewritePath("~/Art/ViewArticle.aspx?id="+id);
            }
        }


 知识点:

Rewrite和Redirect的区别:

通过Rewrite,可以把页面请求发给其他页面处理。但是和Redirect的区别在于,地址栏没有变化。

Redirect浏览器和服务器发生两次请求,也就是服务器命令客户端“去访问Test1.aspx”;Rewrite则是服务器内部的一个接管,在服务器内部告诉“Test1.aspx”“请帮我处理这个用户的请求”,浏览器和服务器只发生一次交互,浏览器不知道是Test1.aspx做的相应,浏览器只是向服务器发出一个请求。

就像用户去北京国美买手机,缺货时的两种处理:让用户自己坐车去上海国美买手机(Redirect);北京国美从上海国美内部调货,用户只需要在北京国美店里等着就行了,最后用户还是能在北京店里购买到手机(Rewrite)。

Server.Transfer和Redirect的区别同上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值