转载自:http://www.cnblogs.com/knowledgesea/archive/2012/10/08/2715350.html

一. 为了页面更有利于seo优化,url重写程序需要做出的不可缺少的手段之一。

二.目前url重写最常见的两种方法有:

1.通过熟悉页面的内部执行流程,也就是asp.net请求管道中的相关知识点,进行url重写。

2.通过使用微软提供的UrlRewriter.dll实现url重写(简单);

三、在请求管道中的第一个请求管道中拦截url并使其完成url重写功能:

1.熟悉请求管道实现程序运行的全过程:

(1):BeginRequest: 开始处理请求
(2):AuthenticateRequest授权验证请求,获取用户授权信息
(3):PostAuthenticateRequest获取成功
(4): AunthorizeRequest 授权,一般来检查用户是否获得权限
(5):PostAuthorizeRequest:获得授权
(6):ResolveRequestCache:获取页面缓存结果
(7):PostResolveRequestCache 已获取缓存
(8):PostMapRequestHandler 创建页面对象
(9):AcquireRequestState

获取Session-----先判断当前页面对象是否实现了IRequiresSessionState接口,如果实现了,则从浏览器发来的请求报文体中
获得SessionID,并到服务器的Session池中获得对应的Session对象,最后赋值给HttpContext的Session属性
(10)PostAcquireRequestState 获得Session
(11)PreRequestHandlerExecute:准备执行页面对象
执行页面对象的ProcessRequest方法
(12)PostRequestHandlerExecute 执行完页面对象了
(13)ReleaseRequestState 释放请求状态
(14)PostReleaseRequestState 已释放请求状态
(15)UpdateRequestCache 更新缓存
(16)PostUpdateRequestCache 已更新缓存
(17)LogRequest 日志记录
(18)PostLogRequest 已完成日志
(19)EndRequest 完成、

2.直接上代码:



网站结构图:



using System;
using System.Collections.Generic;
using System.Web;
using System.Text;
using System.Text.RegularExpressions; namespace UrlReWriter
{
class UrlWriter:IHttpModule
{
#region IHttpModule 成员 public void Init(HttpApplication context)
{
context.BeginRequest+=new EventHandler(context_BeginRequest);
} void context_BeginRequest(object sender, EventArgs e)
{
//获得当前页面请求管道的HttpApplication对象
HttpApplication application = sender as HttpApplication;
HttpContext context = application.Context;//获得上下文对象
string url = context.Request.Url.LocalPath;//获得URL(不包含域名和路径) Regex reg1 = new Regex("/WebForm2/[A-Z0-9a-z_]+");//注意文件夹与文件名称的大小写.
if (reg1.IsMatch(url)) //这种情况是匹配根据ID值来查看某个文章的内容。
{
string strUserName = url.Substring(url.LastIndexOf('/')+);
context.RewritePath("/WebForm2.aspx?id=" + strUserName); //前台的列表页就可以这样写:<a href='../WebForm2/<%#Eval("id")%>'></a>
}
else if (url.Contains("/admin")) //如果url中包含"/admin"字样则转向,实现用户验证,哈哈,不过这里是错的,应为这个请求管道中还获取不到session值呢,这个验证最好在第九个请求管道(AcquireRequestState )中完成。
{
context.RewritePath("/Error.aspx");
}
}
public void Dispose()
{ } #endregion
}
}


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="url重写.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<a href="WebForm2/12">重写</a> <!--这里是有利于seo的链接-->
</div>
</form>
</body>
</html>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace url重写
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Request.QueryString["id"]); //在转到的页面输出传过来的参数
}
}
}


  <httpModules>
<add name="UrlReWriter" type="UrlReWriter.UrlWriter,UrlReWriter"/>
</httpModules>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>


note:记得在url重写项目中引用UrlReWriter项目。否则httpModules接口没有注册,url重写泡汤是必然的。呵呵

URL 重写的更多相关文章

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

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

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

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

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

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

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

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

  5. 【url重写】

    一.原理void Application_BeginRequest(object sender, EventArgs e)    {  //url重写        HttpApplication a ...

  6. asp.net mvc 中 一种简单的 URL 重写

    asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...

  7. UrlRewritingNet伪静态的使用方法与解决方案(URL重写)

    在建站初期时,我们往往需要考虑的是使用真静态还是伪静态,这对于往后的站点配置,延展性都会产生深远的影响. 我使用伪静态的唯一目的:SEO优化.毋容置疑,伪静态在对于Spider是非常有利的,因此,我更 ...

  8. nginx的URL重写应用实例

    1,NGINx的URL重写 NGINX 的URL重写模块用的比较多,主要使用的命令有if rewrite set break 2 if命令 语法如下"" 语法:if(conditi ...

  9. springMVC学习之url重写:urlrewrite with tuckey UrlRewriteFilter

    在开发网站时地址栏的一些信息是我们不希望让客户看到,所以在开发时候就会涉及到url重写的问题. 下面介绍一种常用的url地址重写的方法. 1.利用maven下载相关jar文件,pom文件配置如下: & ...

  10. ThinkPHP的URL重写+路由+伪静态,实现SEO效果。

    1.URL重写,隐藏网址中的Index.php. ThinkPHP 作为 PHP 框架,是单一入口的,那么其原始的 URL 便不是那么友好.但 ThinkPHP提供了各种机制来定制需要的 URL 格式 ...

随机推荐

  1. no matching function for call to 'make_pair(std::string&, size_t&)'

    rtl->push_back(make_pair<string, int>(str, pos)); 在redhat6上编译无问题,在centos7上编译出现错误: no matchi ...

  2. 〖Linux〗Bash快捷键使用

    这篇 Bash Shell Shortcuts 的快捷键总结的非常好.值得学习.下面内容大多数是拷贝粘贴与总结. CTRL 键相关的快捷键: Ctrl + a - Jump to the start ...

  3. TypeScript 面向对象基础知识

    孙广东  2016.4.5 JavaScript如今到处都是.web.server(通过NodeJS).移动应用(通过各种框架).全部这些,TypeScript都能够使用,而且能够为JavaScrip ...

  4. Android应用开发揭秘之优化技术

    2013-06-28 第15章 优化技术   不管用什么语言进行开发,所有的优秀代码都会展示出共有的经典品质: 简练,可读性强,模块化,层次性,设计良好,高效,优雅,清晰等.   Java程序员能够依 ...

  5. spring 3.0系统集成webservice

    spring 3.0系统集成webservice,踩了很多坑以后总算成功了,故写下这篇博客以记录. 1.准备jar包 由于项目是spring3.0,所以应该要使用cxf 2.7版本才可以成功配置,高版 ...

  6. js获取当前域名的方法

    一.获取当前域名 1.方法一 var domain = document.domain; 2.方法二 var domain = window.location.host; 但是获取到的domain在线 ...

  7. Go语言核心之美 4.3-多返回值

    在Go语言中.函数能够有多个返回值,这个特性我们已经在之前的样例见过非常多,非常多标准库函数都会返回两个值,一个是期望得到的函数执行结果,另外一个是函数出错时的错误值. 以下的程序是findlinks ...

  8. 响应式布局框架 Pure-CSS 5.0 示例中文版-上

    0. Pure-CSS 介绍 Pure CSS 是雅虎出品的 CSS 框架, 依托于Normalize.CSS,在不适用任何JS代码情况下即可实现响应式布局的轻量级框架,无依赖,体积小. 1. CDN ...

  9. C#趣味程序---爱因斯坦的台阶问题

    问题:设有一阶梯,每步跨2阶.最后余1阶.每步跨3阶.最后余2阶:每步跨5阶.最后余4阶:每步跨6阶.最后余5阶:每步跨7阶.刚好到阶顶.问共同拥有多少阶梯? using System; namesp ...

  10. https://download.csdn.net/download/qq_33200967/10679367

    convert_variables_to_constants 模型 https://download.csdn.net/download/qq_33200967/10679367