当前位置: 主页 > 服务器技术 > Web服务器 > Apache通过Rewrite实现co-branding

Apache通过Rewrite实现co-branding

时间:2011-5-22来源:互联网 点击:

 Co-branding 的主要需要解决的问题就是通过用户访问的不同 URL 来识别用户是想访问哪个品牌 (brand) 下的网络服务,从而将之后有关品牌的文字,图片,LOGO,Flash 等等界面布局相关的要素都用上该品牌下提供的 UI 要素,甚至包括网页布局。当然这种基于品牌定制化的服务是客户在网络服务提供商购买或者免费获得的。

  本文主要讲解了一种实现这种定制化服务的技术手段。本文假设用户都已经熟悉开发网络服务的一些软件和技术:Apache,是 Apache 软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的 Web 服务器端软件之一; JSP(全称 JavaServer Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同建立的一种使软件开发者可以响应客户端请求,而动态生成 HTML、XML 或其他格式文档的 Web 网页的技术标准。JSP 技术是以 Java 语言作为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于 HTTP 的应用程序。本文的网页例子用 JSP 实现,当然读者也可以轻松的想到如何用 PHP 或者其他网页开发语言来实现例子中的功能。

  本文包括三部分:Apache 配置和 URL 跳转、JSP 提取和保存 branding 信息、JSP 动态显示不同的 UI 元素。

  Apache 配置和 URL 跳转

  前面介绍过,Co-branding 需要解决的首要问题就是如何通过用户访问的不同 URL 来识别用户是想访问哪个品牌 (brand) 下的网络服务。为了解决这个问题,有一种技术手段就是想到利用 Apache 服务器,Apache 服务器监听着服务域的 HTTP 端口,当用户访问 http://www.CRL.com/mycompany.com 网络服务的时候,用户的浏览器会首先将请求发送到 Apache 服务器,然后 Apache 服务器分发给处理该请求的模块和最后返回用户应该看到的页面到用户端的浏览器。因此,我们利用 Apache 的 rewrite module,就可以做到当收到用户的 URL 请求时候,识别出用户是想访问 mycompany.com 品牌的网络服务,然后将请求转换成带有品牌信息的 URL 转发给特定的处理页面。

  首先确定您使用的 Apache 版本,及是否加载了 mod_rewrite 模块。及是否加载了 mod_rewrite 模块 . mod_rewrite 的是一个 Apache 模块,可使服务器操纵请求的网址。根据一系列规则对传入的网址进行检查,规则中包含一个正则表达式来检测特定的格式。如果在地址中发现了一个格式,并且满足适当的条件,该格式就会被一个替代的字符串或者是动作取代。

  Apache 1.x 的用户请检查 conf/httpd.conf 中是否存在如下两段代码:

清单 1. Apache 1.x 的加载模块代码

 LoadModule rewrite_module libexec/mod_rewrite.so 
 AddModule mod_rewrite.c 

  Apache 2.x 的用户请检查 conf/httpd.conf 中是否存在如下一段代码:

清单 2. Apache 2.x 的加载模块代码

 LoadModule rewrite_module modules/mod_rewrite.so 

 如果存在,那么在配置文件(通常就是 conf/httpd.conf)中加入如下代码。此时请务必注意,如果网站使用通过虚拟主机来定义,请务必加到虚拟主机配置,即 <VirtualHost> 中去,如果加在虚拟主机配置外部将可能无法使用,改好后将 Apache 重启。稍后再解释这段代码的意思

清单 3. 加入配置文件的代码

 LoadModule rewrite_module   modules/mod_rewrite.so 
 <IfModule rewrite_module> 
 RewriteEngine on 
 RedirectMatch ^(.*)/([^/]*).com$ $1/index.jsp?brand=$2 
 </IfModule> 

  如果没有加载这个 mod_rewrite 模块,那多半就是 Apache 本身编译的时候就没有编译上 rewrite 模块了,那我们需要手工自己编译一下这个模块。

  先找到你的 Apache 最初编译的源代码目录,找到放 mod_rewrite.c 的目录,例如 :/usr/local/src/httpd-2.2.13/modules/mappers, 然后使用 Apache 安装好的 apxs 命令编译即可:

清单 4. 指向源代码目录的代码

 /usr/local/apache2/bin/apxs -i -a -c ./mod_rewrite.c 

 如果没有什么错误的话,会在 apache/modules 目录中编译出一个 mod_rewrite.so 文件。
同时 apxs 应该会自动编译并且部署到你的 Apache 目录,会在
vi /usr/local/apache2/conf/httpd.conf 里加载:
LoadModule rewrite_module    modules/mod_rewrite.so

  如果没有部署,你将 mod_rewrite.so 手工拷贝到的 Apache modules 目录下并且修改 httpd.conf 进行加载即可,例如:/usr/local/apache2/modules

  2. 接下来就可以用 rewrite 来将不同的访问 URL 参数化来处理了。Rewrite module 可以用一个正则表达式来匹配用户发送过来的 URL 请求,然后转换成另外一种形式的 URL 请求,然后再交给 Apache 去分发和处理修改后的 URL 页面请求。

  我们在 Apache 的 httpd.conf 里加入以下的 code 就可以达到这样的效果。

清单 6. URL 转换的代码

 LoadModule rewrite_module   modules/mod_rewrite.so 
 <IfModule rewrite_module> 
  RewriteEngine on 
  RedirectMatch ^(.*)/([^/]*).com$ $1/index.jsp?brand=$2 
   </IfModule> 

  熟悉正则表达式的读者,可以看到例子中的 RedirectMatch 后面跟的正则表达式会匹配 http://www.CRL.com/mycompany.com 然后转换为 http://www.CRL.com/index.jsp?brand=mycompany

站长资讯网
. TAG: apache Rewrite co-branding
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言