最近工作需要用到apache rewrite功能,之前本机已经安装apache,但没有安装rewrite模块。下面总结一下rewrite模块的安装过程和相关知识。本机已安装的apache版本为2.2.16,操作系统为ubuntu10.10。
一、 安装过程
1. 在apache源码目录下查找mod_rewrite.c文件。
find . -name mod_rewrite.c
2. 进入mod_rewrite.c文件所在目录。
cd modules/mappers
3. 将C程序编译成共享模块,以便在运行时加载到apache服务器中。
/usr/alibaba/install/httpd-2.2.16/bin/apxs -c mod_rewrite.c
其中/usr/alibaba/install/httpd-2.2.16为本机的apache安装目录。
console输出如下:
/usr/alibaba/install/httpd-2.2.16/build/libtool --silent --mode=compile gcc -prefer-pic -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/alibaba/install/httpd-2.2.16/include -I/usr/alibaba/install/httpd-2.2.16/include -I/usr/alibaba/install/httpd-2.2.16/include -c -o mod_rewrite.lo mod_rewrite.c && touch mod_rewrite.slo
/usr/alibaba/install/httpd-2.2.16/build/libtool --silent --mode=link gcc -o mod_rewrite.la -rpath /usr/alibaba/install/httpd-2.2.16/modules -module -avoid-version mod_rewrite.lo
4. 安装动态共享对象到服务器的module目录中,并修改httpd.conf文件配置。
/usr/alibaba/install/httpd-2.2.16/bin/apxs -i -a -n rewrite mod_rewrite.la
console输出如下:
/usr/alibaba/install/httpd-2.2.16/build/instdso.sh SH_LIBTOOL='/usr/alibaba/install/httpd-2.2.16/build/libtool' mod_rewrite.la /usr/alibaba/install/httpd-2.2.16/modules
/usr/alibaba/install/httpd-2.2.16/build/libtool --mode=install cp mod_rewrite.la /usr/alibaba/install/httpd-2.2.16/modules/
cp .libs/mod_rewrite.so /usr/alibaba/install/httpd-2.2.16/modules/mod_rewrite.so
cp .libs/mod_rewrite.lai /usr/alibaba/install/httpd-2.2.16/modules/mod_rewrite.la
cp .libs/mod_rewrite.a /usr/alibaba/install/httpd-2.2.16/modules/mod_rewrite.a
chmod 644 /usr/alibaba/install/httpd-2.2.16/modules/mod_rewrite.a
ranlib /usr/alibaba/install/httpd-2.2.16/modules/mod_rewrite.a
PATH="$PATH:/sbin" ldconfig -n /usr/alibaba/install/httpd-2.2.16/modules
----------------------------------------------------------------------
Libraries have been installed in:
/usr/alibaba/install/httpd-2.2.16/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/alibaba/install/httpd-2.2.16/modules/mod_rewrite.so
[activating module `rewrite' in /usr/alibaba/install/httpd-2.2.16/conf/httpd.conf]
参数含义:
-i 表示需要执行安装操作。
-a 自动增加一个LoadModule行到httpd.conf文件中,以激活此模块,或者,如果此行已经存在,则启用之。
-n 增加或启用的模块名称。
5. 打开apache安装目录下的conf/httpd.conf文件,检查是否有如下行:
LoadModule rewrite_module modules/mod_rewrite.so
如果包含此行,则安装成功。
6. 重新启动apache。
/usr/alibaba/install/httpd-2.2.16/bin/apachectl stop
/usr/alibaba/install/httpd-2.2.16/bin/apachectl start
二、 安装错误解决方法
1. 现象: Can`t loacte API module staructure `mod_rewrite_module` in file
/usr/local/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-
0.so.0:undefined symbol:mod_rewrite_module
解决方法: httpd.conf里面写的mod_rewrite_module改成rewrite_module。
2. 现象: module rewrite_module is built-in and can't be loaded.
解决方法: 表示模块是内建的,不用再手动调入,注释掉httpd.conf中如下行:
#LoadModule rewrite_module modules/mod_rewrite.so
检查所有内建模块的命令: apachectl -l
三、 rewrite功能简介
需求: 如果本地包含样式文件,则通过本地apache访问资源;否则从远端服务器获取资源。
实现:
<VirtualHost *:80>
DocumentRoot "/home/zhouyingbo/sourcecode/style_other/20111031_88209_punish_1"
ServerName style.china.alibaba.com
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f #不是本地文件夹
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d #不是本地文件
RewriteRule ^(.*)$ http://10.20.136.137$1 [L] #重写到远端服务器
</IfModule>
</VirtualHost>
说明:
RewriteEngine On 表示开启重写引擎功能;
RewriteCond语法格式为: RewriteCond TestString CondPattern,当TestString满足CondPattern时,执行RewriteRule定义的规则。
RewriteRule语法格式为: RewriteRule Pattern Substitution,Pattern为posix正则式,Substitution用来替换相应的匹配。
四、参考资料
RewriteCond参考文档: http://blog.csdn.net/keyunq/article/details/2536875
RewriteRule参考文档: http://blog.csdn.net/bjbs_270/article/details/2097064
分享到:
相关推荐
Apache的Rewrite Module(重写模块)是Apache服务器中一个非常强大的工具,主要用于URL重写及重定向功能。它通过一系列规则对请求进行处理,实现动态地改变请求路径,从而达到优化网站结构、改善用户体验的目的。 ...
Apache的Mode Rewrite模块和.htaccess文件配合 Apache的Mode Rewrite模块和.htaccess文件配合是Apache服务器中两个非常重要的组件,特别是在网站开发和部署中。下面我们将详细介绍这两个组件的概念、配置方法和应用...
在Apache配置文件`httpd.conf`或`.htaccess`中,你可以通过`RewriteEngine`指令启用Rewrite模块,并使用`RewriteRule`指令定义URL重写规则。例如: ```apacheconf RewriteEngine On RewriteRule ^old-page.html$ /...
本文将介绍如何使用PHP编写函数来检查Apache的mod_rewrite模块是否已安装。这个函数名为`isRewriteMod()`,由作者Pierre-Henry Soria提供。以下是函数的详细实现: ```php /** * @title Check if Apache's mod_...
### Apache mod_rewrite模块使用教程 #### 一、引言 Apache服务器是一款广泛使用的Web服务器软件,支持多种操作系统,包括Windows和Linux。为了更好地管理和优化网站的URL结构,Apache提供了强大的`mod_rewrite`...
模块`mod_rewrite`是Apache的一个核心模块,它提供了URL重写和URL路由的能力,这对于创建SEO友好的伪静态URL、实现URL短链、隐藏真实路径等场景非常有用。在`.htaccess`文件中启用`mod_rewrite`模块,你需要开启...
2. **启用URL Rewrite模块**: - 编辑`httpd.conf`文件。 - 找到`#LoadModule rewrite_module modules/mod_rewrite.so`行,去掉前面的注释符号`#`。 - 如果没有安装`mod_rewrite`模块,可以通过重新编译Apache并...
2. 运行apxs命令来编译和安装模块:`sudo /usr/local/apache2/bin/apxs -i -a -c mod_rewrite.c` - `-i`:将模块安装到modules目录 - `-a`:在httpd.conf中激活模块 - `-c`:执行编译操作 完成编译安装后,需要...
Apache Rewrite Rule是Apache服务器中的一种功能,用于URL重写,它是Apache HTTP服务器的mod_rewrite模块的核心功能。这个功能使得Web服务器能够根据预定义的规则,将用户请求的URL转换为另一种形式,通常是为了优化...
10. **模块扩展**:Apache支持大量的模块扩展,如mod_rewrite用于URL重写,mod_proxy用于代理和负载均衡,mod_deflate用于内容压缩,可以根据需要安装和启用。 请注意,这里提到的"apache-tomcat-7.0.42"文件可能是...
这两个工具是构建和安装几乎所有需要编译的软件(包括Apache)所必需的。 2. **安装PCRE库** PCRE (Perl Compatible Regular Expressions) 库提供了与Perl兼容的正则表达式匹配功能。Apache需要PCRE库来支持URL...
如果你的服务器apache还没有安装,那很简单,在编译apache时将mod_rewrite模块编译进去就可以,相关文档可以在http://man.chinaunix.net/newsoft …… ew/mod/mod_rewrite. html中找到。如果你的apache已经安装好了...
首先,你需要确保Apache服务器安装了mod_rewrite模块。在Apache的配置文件`httpd.conf`(通常位于`conf`目录)中,找到类似以下的行: ``` LoadModule rewrite_module modules/mod_rewrite.so ``` 如果这行前面...
4. **编译和安装**:使用`make`和`sudo make install`完成编译和安装。 5. **启动Apache**:安装完成后,启动Apache服务,通常通过`sudo systemctl start httpd`或`sudo apachectl start`命令。 6. **设置开机启动...
3. **编译和安装 APR (Apache Portable Runtime)** - 进入 `srclib/apr` 目录。 - 使用 `./configure --prefix=/home/liuchao/local/apr` 来配置APR的安装路径。 - 执行 `make` 和 `make install` 进行编译和...
方法有两种一种是编译apache的时候就直接安装rewrite模块,别一种是编译apache时以DSO模式安装apache,然后再利用源码和apxs来安装rewrite模块。 基于服务器级的(httpd.conf)有两种方法,一种是在httpd.conf的全局下...
2. **模块化设计**:Apache的模块化设计使得我们可以根据需求安装和卸载各种模块,如mod_rewrite用于URL重写,mod_security用于Web应用防火墙,mod_deflate用于内容压缩,mod_proxy用于代理服务等。 3. **Apache...