在global.asax中实现URL重写

看到有很多网站都用到了URL重写的功能,在网上找了很多资料,实现的方法有多种,可是大部分都很难理解,过程也比较复杂,不过我找到一种很简单也很容易理解的实现URL重写的方法,只需要在global.asax.cs文件中添加一个函数就可以实现,下面的代码是我根据在网上找到的代码写的,用在了我做的一个网站上,当然因为我的需求不同,跟原来的代码有点变化,如下:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
  string oldUrl = HttpContext.Current.Request.RawUrl;
  
  string pattern = @"^(.+)News(d+).html(?.*)*$";
  string replace = "$1NewsDetails.aspx?NID=$2";
  
  string patternCul = @"^(.+)Culture(d+).html(?.*)*$";
  string replaceCul = "$1CultureDetails.aspx?CID=$2";
  
  if (Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled))
  {
    string newUrl = Regex.Replace(oldUrl, pattern, replace,
      RegexOptions.Compiled | RegexOptions.IgnoreCase);
    this.Context.RewritePath(newUrl);
  }
  if (Regex.IsMatch(oldUrl, patternCul, RegexOptions.IgnoreCase | RegexOptions.Compiled))
  {
    string newUrl = Regex.Replace(oldUrl, patternCul, replaceCul,
      RegexOptions.Compiled | RegexOptions.IgnoreCase);
    this.Context.RewritePath(newUrl);
  }
}

这里我实现了2个地址的URL重写,看第一个的效果就是当我在地址栏访问:/News12.html的时候,其实访问的地址是:NewsDetails.aspx?NID=12这个地址,(仔细琢磨一下代码就可以看明白了,不用我多说了吧:))就这样简单的实现了URL的重写,我个人认为这样重写之后有一个好处,我把GET方法传递的参数变量给隐藏起来了,增强了安全性,还有给人一种误会认为你的网站是静态的,呵呵....

当然借助于强大的正则表达式,你只要写好patten,replace里面的正则,那么网页就可以按照你任何想要的方式进行重写,当然这要在服务器支持的前提下.

时间: 2024-11-16 18:07:17

在global.asax中实现URL重写的相关文章

在 ASP.NET 中执行 URL 重写

asp.net|执行 Scott Mitchell 4GuysFromRolla.com 适用范围: Microsoft ASP.NET 摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重写.URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.讨论实现 URL 重写的各种技术,并介绍执行 URL 重写的一些实际情况. 下载本文的源代码. 本页内容 引言 URL 重写的常见用法 请求到达 IIS 时将会发生什么情况 实现 URL 重写 构建 UR

global.asax中的代码不执行为什么?急!!

问题描述 各位高手,我的问题就是global.asax中的代码不执行,在2005中运行完全正常,但是发布成网站就用不了了,我也查了相关资料,把虚拟目录的权限开到最大,把global.asax中的函数设成proteced类型,把global.asax文件考到网站根目录下.但是发布出来的网站还是不执行global.asax中的代码,哪位高人指点一下,小弟感激不尽 解决方案 解决方案二:在服务器的global中一个事件当中存入一个值在页面上输出一下,看看到底是否执行,再说.解决方案三:输出测试一下啥!

global.asax 中import namespace 无效

问题描述 我在asp.net项目中,global.asax中importnamespace="XXX",在vs2013中global.asax中可以用XXX中定义的PublicConstAPPKEY_VISITORS变量.但发布到IIS7.5后,运行 报 "未声明"APPKEY_VISITORS".它可能因其保护级别而不可访问." 请教这是什么原因 解决方案 解决方案二:重新生成你的整个解决方案看看解决方案三:重新生成的整个解决方案也无效

关于在global.asax中定位到登录窗口(dl.aspx)的问题

问题描述 我自做的一个登录窗口dl.aspx,我想在session过期时定位到dl.aspx页面,我在global.asax中的voidSession_End(objectsender,EventArgse)事件里写如下代码怎不能定位请高手指点,会话模式已设为InProcvoidSession_End(objectsender,EventArgse){//在会话结束时运行的代码.//注意:只有在Web.config文件中的sessionstate模式设置为//InProc时,才会引发Sessio

ASP.NET 中执行 URL 重写

asp.net|执行   URL 重写就是把URL地址重新改写      详情:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx      优点:把url缩短等      用法:1.下载ms的URLRewrite.dll,放到你的bin下      2.在web.config里设置如下:      <?xml version="1.0" encoding="

在ASP.NET中执行URL重写经典方案

摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重写.URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.讨论实现 URL 重写的各种技术,并介绍执行 URL 重写的一些实际情况. 引言 让我们花点时间来看一下网站上的一些 URL.您是否发现一些类似于 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 的 URL?或者,您可能将一系列网页从一个目录

Apache 2.x服务器中的URL重写的配置和应用

1.关于Apache 2.x URL别名的说明和设置: Apache 2.x 服务器中的URL别名规则的文档,它是通过rewrite模块来实现的.能过URL别名规则,我们能看到一个干净的URL,比如可以重写为类似静态网页的地址.比如 LinuxSir.Org 论坛中,每个帖子都有一个静态网页的地址.干净的URL,对于Google搜索引擎来说是极为受用的,能更快的收录. 这个重写,是通过Apache 2.x 内部实现的,只是表面上把Web应用程序的URL变的干净一点,原始的URL还是一样有效. 1

ASP.NET中获取URL重写前的原始地址

在ASP.NET中,如果你使用了URL重写,通过HttpContext.Request获取到的是重写后的地址.如果这个地址要返回给客户端(比如Redirect),我们一般希望是重写前的友好地址. 通常的使用场景是当我们有某个页面需要用户登录才能访问时,我们会在代码中判断当前访问用户是否登录,如果未登录,则重定向至登录页面,并将当前网址通过Url参数传递给登录页面.如果使用了URL重写,并通过Request.Url.AbsoluteUri获取当前网址,用户登录后打开的就是重写后的地址,这虽然不影响

ASP.NET中获取URL重写前的原始地址详解

在ASP.NET中,如果你使用了URL重写,通过HttpContext.Request获取到的是重写后的地址.如果这个地址要返回给客户端(比如Redirect),我们一般希望是重写前的友好地址.   通常的使用场景是当我们有某个页面需要用户登录才能访问时,我们会在代码中判断当前访问用户是否登录,如果未登录,则重定向至登录页面,并将当 前网址通过Url参数传递给登录页面.如果使用了URL重写,并通过Request.Url.AbsoluteUri获取当前网址,用户登录后打开的就是 重写后的地址,这虽