`

Apache 配置 Rewrite, 顺便记录下编译添加新模块

阅读更多

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 

 

编译的过程如下:


清单 5. 编译过程的代码

				 
 /usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic 
  -DAP_HAVE_DESIGNATED_INITIALIZER -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread 
 -I/usr/local/apache2/include  -I/usr/local/apache2/include 
  -I/usr/local/apache2/include  -c -o ./mod_rewrite.lo 
 ./mod_rewrite.c && touch ./mod_rewrite.slo 
 /usr/local/apache2/build/libtool --silent --mode=link gcc -o ./mod_rewrite.la 
  -rpath /usr/local/apache2/modules -module -avoid-version   
  ./mod_rewrite.lo 
 /usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool'
  ./mod_rewrite.la /usr/local/apache2/modules 
 /usr/local/apache2/build/libtool 
 --mode=install cp ./mod_rewrite.la /usr/local/apache2/modules/ 
 cp ./.libs/mod_rewrite.so /usr/local/apache2/modules/mod_rewrite.so 
 cp ./.libs/mod_rewrite.lai /usr/local/apache2/modules/mod_rewrite.la 
 cp ./.libs/mod_rewrite.a /usr/local/apache2/modules/mod_rewrite.a 
 chmod 644 /usr/local/apache2/modules/mod_rewrite.a 
 ranlib /usr/local/apache2/modules/mod_rewrite.a 
 PATH="$PATH:/sbin" ldconfig -n /usr/local/apache2/modules 
 ---------------------------------------------------------------------- 
 Libraries have been installed in: 
   /usr/local/apache2/modules 

 If you ever happen to want to link against installed libraries 
 in a given directory, LIBDIR, you must either use libtool, and 
 specify the full pathname of the library, or use the `-LLIBDIR'
 flag during linking and do at least one of the following: 
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable 
     during execution 
   - add LIBDIR to the `LD_RUN_PATH' environment variable 
     during linking 
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag 
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

 See any operating system documentation about shared libraries for 
 more information, such as the ld(1) and ld.so(8) manual pages. 
 ---------------------------------------------------------------------- 
 chmod 755 /usr/local/apache2/modules/mod_rewrite.so 
 [activating module `rewrite' in /usr/local/apache2/conf/httpd.conf] 

 

如果没有什么错误的话,会在 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


图 1. 流程图
图 1. 流程图

分享到:
评论

相关推荐

    linux_apache_rewrite编译配置.pdf

    本文将详细介绍如何在Linux环境中编译和配置Apache以及启用Rewrite模块。 首先,我们需要安装Apache。这通常涉及以下步骤: 1. 下载Apache源代码包,例如httpd-x.x.x.tar.gz。 2. 解压源代码:`tar -zxvf httpd-x....

    Apache URL Rewrite功能配置

    - 如果没有安装`mod_rewrite`模块,可以通过重新编译Apache并添加`--enable-rewrite=shared`选项来安装。 3. **添加重写规则**: - 在`httpd.conf`文件中添加以下配置: ```apache RewriteEngine On ...

    linux_apache_rewrite编译配置整理.pdf

    在Linux环境下配置Apache服务器,特别是涉及到URL重写功能时,通常需要使用mod_rewrite模块。这个模块允许我们通过定义规则来转换URL,以实现动态URL的隐藏、SEO优化或者内部路由处理。以下是关于`linux_apache_...

    Apache的ReWrite的应用

    在Apache配置文件`httpd.conf`或`.htaccess`中,你可以通过`RewriteEngine`指令启用Rewrite模块,并使用`RewriteRule`指令定义URL重写规则。例如: ```apacheconf RewriteEngine On RewriteRule ^old-page.html$ /...

    Apache的Mode Rewrite模块和.htaccess文件配合.docx

    Mode Rewrite模块的配置方法是在Apache的配置文件httpd.conf中添加相关的指令,例如 LoadModule rewrite_module modules/mod_rewrite.so,这将启用Mode Rewrite模块。然后,在httpd.conf文件中添加相关的Rewrite规则...

    apache_rewrite语法

    apache_rewrite语法的详细解析,实现php的URL重写。

    Apache Rewrite Module 的重定向问题

    在Apache 1.x版本中,如果要启用Rewrite Module,需要在`conf/httpd.conf`文件中加载相应的模块,并添加以下行: ```apache LoadModule Rewrite_module libexec/mod_rewrite.so AddModule mod_rewrite.c ``` 对于...

    如何配置静/动态编译Apache+Php+MySQL

    - 在配置阶段,启用 SO 模块和重写模块,使用 `--enable-module=so` 和 `--enable-module=rewrite`。 - 编译并安装 Apache。 2. **编译 PHP**: - 解压缩 PHP 源代码。 - 在配置阶段,指定 Apache 的安装路径,...

    Apache-2.4.2交叉编译

    ### Apache-2.4.2交叉编译知识点详解 #### 一、源码下载与准备工作 **源码下载**: - 首先,需要访问Apache官网获取最新的Apache-2.4.2源码。 - 为了提高下载速度,推荐选择国内镜像站点进行下载。 **工作环境设置...

    如何在Ubuntu下启动Apache的Rewrite功能.docx

    启用Apache的Rewrite功能是一项重要的配置工作,它允许你通过修改URL(重写规则)来进行URL美化、隐藏真实路径或者实现其他高级路由逻辑。下面将详细介绍如何在Ubuntu下启动Apache的Rewrite功能。 首先,Apache的...

    如何在Apache 服务器下配置URL 静态化的 Rewrite 规则.docx

    ### 如何在Apache服务器下配置URL静态化的Rewrite规则 #### 一、了解URL静态化与Rewrite规则 **URL静态化**是指将原本动态的URL(如包含多个参数的PHP页面)转换成类似静态页面的形式(如.html或.htm)。这种做法...

    Apache配置详解(最好的APACHE配置教程)

    Apache的主配置文件通常是`httpd.conf`,位于安装目录下的`conf`子目录中。这个文件包含了服务器的基本设置,如端口监听、服务器根目录、MIME类型定义等。另外,Apache支持使用`.htaccess`文件进行局部配置,这对于...

    apache-httpd-2.4的win64编译后版本

    总之,这个"apache-httpd-2.4的win64编译后版本"提供了在64位Windows环境下运行的Apache HTTPD服务器,通过VC15编译确保了兼容性和效率。用户需仔细阅读ReadMe.txt文档,正确配置和管理服务器,以充分发挥其潜力并...

    PHP100视频教程54:Apache.Rewrite.拟静态配置.rar

    Apache的Rewrite模块和拟静态配置是Web开发中不可或缺的技术,它们可以帮助我们实现URL的美化,使网站看起来更加专业,同时也对SEO(搜索引擎优化)有着积极的影响。 Apache是世界上最流行的开源Web服务器软件,而...

    IIS6下的网站配置Rewrite伪静态组件教程(iis怎样配置Rewrite伪静态)

    【IIS6下的网站配置Rewrite伪静态组件教程】 在互联网技术中,伪静态是一种将动态网址转换为静态网址的技术,以提高搜索引擎优化(SEO)和用户体验。在IIS6这个较旧的Web服务器版本中,实现伪静态功能通常需要借助...

    Apache服务器下配置URL 态化的Rewrite规则.docx

    如果Apache没有加载mod_Rewrite模块,你需要重新编译Apache时启用该模块,配置选项为`--enable-Rewrite=shared`。 URL重写不仅限于Discuz!,其他如SupeSite、ECShop、SupeV、UCHome等Comsenz公司的产品也支持类似...

    apache编译参数介绍

    在安装Apache服务器时,通过自定义编译参数能够根据实际需求配置出更加适合应用环境的服务。本文将详细介绍这些编译参数的意义及作用,帮助用户更好地理解并选择合适的配置项。 #### 二、核心编译参数解析 1. **--...

    apache rewrite_module模块使用教程

    1. **在Windows环境下**:通常情况下,安装Apache时会自动安装`mod_rewrite`模块。需要确认该模块是否已经被启用,可以在`httpd.conf`文件中找到如下行并取消注释: ```apacheconf LoadModule rewrite_module ...

    编译apache

    完成上述准备工作后,即可进入Apache源码目录并开始配置、编译和安装Apache。 1. **进入Apache源码目录** 进入httpd-2.4.2源码目录: ```bash cd /tmp/httpd-2.4.2 ``` 2. **配置编译选项** 使用`./...

Global site tag (gtag.js) - Google Analytics