当前位置 : 主页 > 网页制作 > HTTP/TCP >

怎么玩 URL Rewriting

来源:互联网 收集:自由互联 发布时间:2021-06-16
URL Rewriting,这个好像似曾相识,又觉得很陌生的技术,已经随着资讯安全与 SEO (Search Engine Optimization) 的脚步,逐渐影响每个 Web Developer,不论你是走哪个技术的(ASP, ASP.NET, PHP, JSP, Ru

URL Rewriting,这个好像似曾相识,又觉得很陌生的技术,已经随着资讯安全与 SEO (Search Engine Optimization) 的脚步,逐渐影响每个 Web Developer,不论你是走哪个技术的(ASP, ASP.NET, PHP, JSP, Ruby, Perl, ...),基本上都很难不去重视它,因为它其实可以帮你很多忙。光是一个 REST 的 URL 模式,就可以让很多人眼睛为之一亮。


URL Rewriting,这个好像似曾相识,又觉得很陌生的技术,已经随着资讯安全与 SEO (Search Engine Optimization) 的脚步,逐渐影响每个 Web Developer,不论你是走哪个技术的,基本上都很难不去重视它,因为它其实可以帮你很多忙。光是一个 REST 的 URL 模式,就可以让很多人眼睛为之一亮。

试想,如果你的网站有某支 URL 是长这样好看:
http://www.abc.com.tw/myblog/blog.aspx?id=18472938290&postdate=20090404

还是这样好看:
http://www.abc.com.tw/myblog/2009/04/04/18472938290.aspx

又或者,使用者是否可以用这样的输入 URL 方式:
http://www.abc.com.tw/productinfo/MP3

去列出他想要搜寻的 MP3 Player 的型录,还是要使用者去打:
http://www.abc.com.tw/productinfo/search.aspx?keyword=MP3?这样的 URL?

我想对行销或消费者行为有概念的人来看的话,答案就很明显了。

URL Rewriting 的强项,就是将外表的 URL,转换成内部自己看的到的 URL 再做处理,可以让内部的 URL 继续使用,又可以让外部的 URL 具亲和性,因此 URL Rewriting 现在已经逐渐成为网站开发人员必须要知道的技术之一,而且现在其实已经有很多 URL Rewriting 的模块可以使用了,例如 UrlRewriting.Net 这个套件,或是 IIS 7.0 中的 URL Rewriting Module 等。

不过,如果能够自己走一遭的话,会更了解 URL Rewriting 是什么,而且对于网络上的 URL Rewriting 模块,也会更具精确的掌握力(以下以 ASP.NET 为主要说明的技术,其他的语言请参照手册,找出相对应的功能)。

首先,URL Rewriting 是作为外部与内部 URL 要求的转换器,它需要过滤所有的 URL,来执行重转向的动作,因此它比较适合生存在 Web Server 的执行过程中,以 ASP.NET 来说,使用 HTTP Module 即可处理这方面的工作(HTTP Handler 较不适合)。

接者,设定处理 HttpApplication.BeginRequest 或是 HttpApplication.AuthorizeRequest 事件(多数的模块都是处理 HttpApplication.AuthorizeRequest 事件):

public void Init(HttpApplication context)
{
??? context.AuthorizeRequest += new EventHandler(AppAuthorizeRequest);
}

然后再于事件常式中,调用 HttpApplication.Context.RewritePath() 即可:

public void AppAuthorizeRequest(object sender, EventArgs e)
{
????(sender as HttpApplication).Context.RewritePath("~/MyHandler.aspx");
}

然后,在 Web.config 中,将这个模块挂到 system.web/httpModules 设定中,若是 IIS 7.0,则要设在 system.webServer/modules 中。


???
???
???????
???

然后执行这个 Web Application,不论你输入哪个 URL 路径,都会被导向到 MyHandler.aspx 中(当然,你的项目中要有 MyHandler.aspx 这个网页)。

URL Rewriting 其实技术上就是这样而已,透过 HttpApplication.Context.RewritePath() 将要求的 URL 传到指定的网页来处理,然而在开发实际上,URL Rewriting 要考量的其实很多:

  1. 由于每个 URL 都会被处理,那如果 URL 指向的是图片,文件,scripts 或其他资源时要如何处理?
  2. 是否有特殊要排除的路径?
  3. 执行 URL Rewriting 时,URL 的格式要怎么设计才会符合需求?
  4. 由于 URL 被重写时,
    的 action 属性会反应内部的 URL,而不是外部的 URL,此时要如何处理?
  5. URL Rewriting 对性能很要求,因为它要处理每一个 URL 要求,而不是选择性不处理。

另外,URL 也不是一定要硬性的做 Rewriting,部分需要排除的就不需要做 Rewriting,或者你有某种格式的 URL 是要做重导向 (HTTP 302) 的话,也可以直接输出 HTTP 302 消息要求浏览器重导向即可,切记,不要在 URL Rewriting 中加太多的判断条件,也不要在 URL Rewriting 中做太耗时间的事,那只会拖慢 URL 的处理速度(例如还要连数据库存取数据这种事)。

原文:大专栏  怎么玩 URL Rewriting

网友评论