asp.net URL重写简化版 速学URL重写

2014-01-02  来源:本站原创  分类:实用技巧  人气:7 

asp.net URL重写(URLRewriter)简化版 。速学URL重写

在 asp.net 里实现 URL重写(URLRewriter)的一个最简单的方法。
参考了 (作者 Scott Mitchell 翻译:Janssen )的大作,虽然没有完全看明白,但是也照猫画虎地做了一个,颇有“成就”感。写出来分享一下。
原作里讲了很多的原理,这里就不说了(其实我也不懂)。这里就写操作过程吧。目的是实现一个最简单的能实现 URL重写 的程序。
1、需要设置一下IIS里的站点属性。

2、修改web.config的内容。

<system.web>
<httpHandlers>
<add verb="*" path="*.zhtml" type="ZDIL.URLRewriter.RewriterFactoryHandler, ZDILURLRewriter" />
</httpHandlers>
</system.web>

其中*.zhtml 就是地址栏里面写的网页的扩展名,就是给用户看的,这个可以随意改(但是要符合扩展名的规则!)。当然要和第一步里面的设置相一致才行。
3、写一个类。

代码

复制代码 代码如下:

using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace ZDIL.URLRewriter
{
/**//// <summary>
/// URL重写
/// </summary>
public class RewriterFactoryHandler : IHttpHandlerFactory
{
/**//// <summary>
/// GetHandler is executed by the ASP.NET pipeline after the associated HttpModules have run. The job of
/// GetHandler is to return an instance of an HttpHandler that can process the page.
/// </summary>
/// <param name="context">The HttpContext for this request.</param>
/// <param name="requestType">The HTTP data transfer method (<b>GET</b> or <b>POST</b>)</param>
/// <param name="url">The RawUrl of the requested resource.</param>
/// <param name="pathTranslated">The physical path to the requested resource.</param>
/// <returns>An instance that implements IHttpHandler; specifically, an HttpHandler instance returned
/// by the <b>PageParser</b> class, which is the same class that the default ASP.NET PageHandlerFactory delegates
/// to.</returns>
public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
{
string sendToUrl = url; //地址栏里面的地址
string filePath = pathTranslated;
string sendToURLString = "/web/index.aspx"; //真正要访问的页面
string queryString = ""; //参数。比如 ?id=123
filePath = context.Server.MapPath(sendToURLString); //物理地址
//这句最重要了。转向了。
context.RewritePath(sendToURLString, String.Empty, queryString);
return PageParser.GetCompiledPageInstance(url, filePath, context);
}
public virtual void ReleaseHandler(IHttpHandler handler)
{
}
}
}

这个类呢,要写在一个单独的项目里面,然后编译成 ZDILURLRewriter.DLL文件。(注意文件名,写错了就不能正常运行了)。
4、完成了。
打开IE ,在地址栏里输入 http://.../1.zhtml。
浏览者看到是一个静态页的地址,但是实际上访问的却是 /web/index.aspx 这个动态网页。
怎么样简单吧。
当然了,这个是最简单的,简单到了“不能用”的地步了。因为他会把所有的 *.zhtml 的访问都“重写”到 /web/index.aspx 。
至于把什么样的网页重写到哪个网页,这里就不介绍了(这里只讲方法,不讲实现的细节)。
方法很多了,原作是通过正则来匹配的,我是通过 string sendToUrl = url; 来判断的。
其他的就看你们的需要了。

相关文章
  • asp.net URL重写简化版 速学URL重写 2014-01-02

    asp.net URL重写(URLRewriter)简化版 .速学URL重写 在 asp.net 里实现 URL重写(URLRewriter)的一个最简单的方法. 参考了 (作者 Scott Mitchell 翻译:Janssen )的大作,虽然没有完全看明白,但是也照猫画虎地做了一个,颇有"成就"感.写出来分享一下. 原作里讲了很多的原理,这里就不说了(其实我也不懂).这里就写操作过程吧.目的是实现一个最简单的能实现 URL重写 的程序. 1.需要设置一下IIS里的站点属性. 2.修

  • Asp.net中获取应用程序完整Url路径的小例子 2014-03-27

    Asp.net中获取应用程序完整Url路径的小例子,需要的朋友可以参考一下 /// <summary> /// Gets the absolute root /// </summary> public static Uri AbsoluteWebRoot { get www.jb51.net { var context = HttpContext.Current; UriBuilder uri = new UriBuilder(); uri.Host = context.Reque

  • 获取上一页面的URL和本页的URL的方法 2014-01-03

    本节主要介绍了获取上一页面的URL和本页的URL的方法,需要的朋友可以参考下 1.获取上一个网页的URL: String url=request.getHeader("Referer"); 2.获取本网页的URL: String url=request.getScheme()+"://"+ request.getServerName()+request.getRequestURI();

  • PrestaShop Rewrite URL 去除ID数字 让URL更符合SEO更美观更简短 2012-07-04

    大家在使用PrestaShop时是不是有这个困惑?为什么产品URL或者目录URL中总有ID数字? 而且 如果做PrestaShop 站群的话,每个数据库如果不一样,那个ID就太碍事了! 为什么PrestaShop URL中一定要有ID 数字标示呢?可以删除么? 因为那个ID是程序寻找的唯一标示,我们家推出了可以去除ID的插件modules:PrestaShop Rewrite URL 去除ID数字 让URL更符合SEO更美观更简短! 从您的Prestashop链接URL中删除ID数字! 它适用于

  • why在重写equals时还必须重写hashcode方法分享 2015-03-25

    首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == ano

  • ASP.NET网站伪静态下使用中文URL的方法 2014-09-19

    中文URL是在URL中直接使用汉字,它的好处是可以使用链接地址看起来非常直观易懂,伪静态的规则,是在web.config文件中定义的 首先解释一下,什么是中文URL呢?它并不是我们常见的把汉字编码为 %CF%EC 这种形式,而是在URL中直接使用汉字 这种形式目前还不是很多见.因为不同的浏览器处理起来可能会有所不同,不过据我测试,IE8和Firefox是完全支持的. 它的好处是可以使用链接地址看起来非常直观易懂!搜索引擎也支持. 先讲一下我的ASP.NET网站的伪静态,我的文件都是以.htm结尾

  • java asp分析各种搜索引擎的关键字,自动识别url 中关键字的编码 2015-04-16

    网上也有一些代码,大部分都是通过输入的关键字来识别编码,并解码.但是搜索引擎得到的referer来源地址上的关键字是通过URLencode编码过的,而且各个网站的关键字Urlencode编码都不一样,gbk,utf-8,gb2312等等. 所以必须要通过编码后的关键字,例如"解析关键字编码"在google里面输入搜索,得到编码后的"%E8%A7%A3%E6%9E%90%E5%85%B3%E9%94%AE%E5%AD%97%E7%BC%96%E7%A0%81" 1.从

  • 一种根据URL参数条件动态生成URL的方法 2013-12-12

    最近做了一个产品列表页类似于搜索列表页, 功能比较简单,比搜索页复杂的逻辑在于,生成各个查询条件的URL. 我们的链接如下: http://xxx.xxx.xxx/product/list.html?spm=0.0.0.0.fCULEV&noHistoryApi=1&q=洗衣机&start_price=1300&end_price=2300&ppath=6560:98950,2814486;570:24403,2085950&sort=sort-fid&am

  • asp.net用url重写URLReWriter实现任意二级域名 新 2014-10-05

    最近有个朋友要做url重写的东西,我帮他弄了弄,回头看当年自己写的那个文章,当时以为自己写的很容易理解.但现在再看却觉得写的不好.而今天百度了一下urlrewriter发现我这个文章竟然排第二.为了方便更多朋友,我再写点东西补充下. 一般用百度搜的朋友都是对这个不了解但又急需要用的,我想,再多的语言也比不过一句代码.于是我把今天帮朋友时候写的一个小例子传了上来.这个小例子的目的是实现对任意url的重写(但不包括二级域名的,有需要二级域名的也可以先了解下url重写的概念). 这个小项目的制作过程如

  • 在ASP.NET中重写URL的代码 2013-12-18

    经常有人请我指导应该如何动态地"重写"URL,以在他们的ASP.NETweb应用中发布比较干净的URL端点.这个博客帖子概述了几个方法,你可以用来在ASP.NET中干净地映射或重写URL,以及按照你自己的需求组织你的URL的结构. 为什么URL映射和重写很重要? 下面是开发人员想要对URL有更大的灵活性的最常见的场景: 1) 处理这样的情形:你要更改你的web应用中网页的结构,但你同时也要确保在你移动网页后,那些被人收藏的老URL不会成为死链接.重写URL允许你透明地将请求转交到新的网

  • 一个完整的ASP.NET 2.0 URL重写方案[翻译] 2014-01-16

    这篇文章描述了一个完整的 ASP.NET 2.0 URL 重写方案.这个方案使用正则表达式来定义重写规则并解决通过虚拟 URLs 访问页面产生回发事件的一些可能的困难. 这篇文章描述了一个完整的 ASP.NET 2.0 URL 重写方案.这个方案使用正则表达式来定义重写规则并解决通过虚拟 URLs 访问页面产生回发事件的一些可能的困难. 为什么要重写 URL ? 将 URL 重写方法应用到你的 ASP.Net 应用程序的两个主要原因是:可用性和可维护性. 可用性 谁都知道,相对于难于辨认的带参数

  • asp.net下用url重写URLReWriter实现任意二级域名的方法第1/2页 2014-01-21

    摘要: 解释了url重写的相关知识.用asp.net实现二级域名重写的方法.对重写的一些问题做了汇总解答.提供了几段示例代码. 好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在文章的后面回复(这是最有效的办法),我会尽力帮助大家解答疑惑. 来找这篇文章的,应该都知道什么叫二级域名吧,废话就不说了.但是讨论前,先要明白一个思想问题. 很多朋友一直考虑不清(我前几天也一直搞不明白)的问题是,我键入一个地址后,怎么这个url就被重写了? 第一步:在浏览器键入了一个地址,比如http://

  • ASP.NET中获取URL重写前的原始地址详解 2014-06-21

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

  • IIS URL重写模块和ASP.NET路由组件比较 2014-07-14

    随着针对IIS 7.0的URL重写模块的发布,以及在.NET框架3.5 SP1中包含了ASP.NET路由(Routing),许多ASP.NET开发人员开始质问这两种特性彼此间的关系,以及应该何时使用. Ruslan Yakushev在LearnIIS.NET上发表了一篇很有指导意义的文章. 二者本质的区别在于:IIS URL重写的处理方式比ASP.NET路由在层次上更低,对于客户端是不可见的. Ruslan给出了IIS 7 URL重写过程的可视化工作流.你可以看到URL重写模块是在请求被传递到请

  • asp.net用url重写URLReWriter实现任意二级域名第1/2页 2015-01-01

    Asp.net 用url重写(URLReWriter)实现任意二级域名 好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在文章的后面回复(这是最有效的办法),我会尽力帮助大家解答疑惑. 来找这篇文章的,应该都知道什么叫二级域名吧,废话就不说了.但是讨论前,先要明白一个思想问题. 很多朋友一直考虑不清(我前几天也一直搞不明白)的问题是,我键入一个地址后,怎么这个url就被重写了? 第一步:在浏览器键入了一个地址,比如http://love.kerry.com,点回车后,都发生了什么?

  • asp.net用url重写URLReWriter实现任意二级域名 高级篇 2015-03-01

    Asp.net 用url重写(URLReWriter)实现任意二级域名,需要的朋友可以参考下,建议先看一下上一篇文章. 我最近写了个小例子,大家可以先看这个,里面有小例子的完整代码下载 http://www.jb51.net/article/20906.htm 好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在文章的后面回复(这是最有效的办法),我会尽力帮助大家解答疑惑. 来找这篇文章的,应该都知道什么叫二级域名吧,废话就不说了.但是讨论前,先要明白一个思想问题. 很多朋友一直考虑不

  • URL重写及干掉ASP.NET试图状态的实现方法 2015-05-01

    URL重写已经很普遍了,但基本上大部分的URL重写都不支持页面的相对路径,所有如果想在已经开发好的项目中添加还是有压力的,第二就是例如微软的那个URL重写是根据正则表达式来处理的,那样是很好,但也有不足之处,就是不方便定位到某个页面只能有哪些参数 1.URL重写已经很普遍了,但基本上大部分的URL重写都不支持页面的相对路径,所有如果想在已经开发好的项目中添加还是有压力的,第二就是例如微软的那个URL重写是根据正则表达式来处理的,那样是很好,但也有不足之处,就是不方便定位到某个页面只能有哪些参数.

  • ASP.NET中获取URL重写前的原始地址 2013-12-02

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

  • asp.net url重写后页面回传问题 2014-09-27

    最近在做项目时遇到了URL重写后当页面回传时,url又刷回原值:这个问题困扰了很久,终于找到解决办法了. 具体办法如下:可以通过自定义页面基类,重写默认的HtmlTextWriter方法,重写属性输出WriteAttribute(string name, string value, bool encode)方法,当输出action时,将action属性的值强制转换为当前虚URL(HttpContext.Current.Request.RawUrl,上面的~/showVisasAll_(\w+)\

  • ASP.NET中URL Rewrite的具体实现方法 2013-11-17

    这篇文章介绍了ASP.NET中URL Rewrite的具体实现方法,有需要的朋友可以参考一下 之前觉得这个话题已经被谈滥了.URL Rewrite早已经被广大开发人员所接受,网上关于URL Rewrite的组件和文章也层出不穷,但是总是让我感觉意犹未尽,于是最终还是忍不住提笔写了这系列文章.这些文章不会谈论URL Rewrite的价值与意义,而只会谈论纯技术的内容.文章中也不会有详尽地实现分析,而是结合了我的经验,从应用角度来讲解这个话题.您已经知道的,您还不知道的,别处已经讲过的,或者还没有讲