Apache添加mod_rewrite模块
博客已经搬家,请访问如下地址:http://www.czhphp.com
最近有一个新需求:
类似微博的地址那样,短地址的实现,为了无线这边广告的推广更方便;
知识点
1, 创建url和段地址的映射,用缓存或者mysql都可以;
CREATE TABLE `shorturl` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT,
`parm` char(30) NOT NULL DEFAULT '', url的参数
`short` char(10) NOT NULL, 短地址
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
url存在则读取,没有则创建;
创建规则是通过id来生成short短地址的;
2, 生成短地址的方法:
3,rewrite
最终短地址的访问形式如:
那么就需要做rewrite跳转到一个文件,然后做处理:
这样可以在/redirect/index.php 文件里做处理;
就是在rewrite的时候遇到了一些问题:我的测试环境是nginx的测试ok,可是线上的环境是apache,而且确没有编译rewrite模块。郁闷啊;
那么就来增加 rewrite模块吧!
//在apache的源码安装目录中寻找mod_rewrite.c文件
#find . -name mod_rewrite.c
//进入包含mod_rewrite.c文件的目录
#cd modules/mappers/mod_rewrite.c
//apxs应指定绝对路径,在你当前正在使用apache的bin目录里
#/usr/local/apache/bin/apxs -c mod_rewrite.c
#/usr/local/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.la
如果没有什么错误的话,应该在你的apache的modules目录中编译出一个mod_rewrite.so文件。
编辑httpd.conf文件,确认httpd.conf中已经包含mod_rewrite.so的加载语句,
如下:
LoadModule rewrite_module modules/mod_rewrite.so
这时,你的apache应该已经支持rewrite了。
注:完成之后,记得重启服务器apache。
.可能遇到的问题
httpd: Syntax error on line 54 of /usr/share/apache-2.2.11/conf/httpd.conf:
Can't locate API module structure
`mod_rewrite_module' in file /usr/local/apache/modules/mod_rewrite.so:
/usr/local/apache/modules/mod_rewrite.so: undefined symbol: mod_rewrite_module
修改 httpd.conf,将
LoadModule mod_rewrite_module modules/mod_rewrite.so
改为
LoadModule mod_rewrite modules/mod_rewrite.so
如果出现这个错误
Syntax error on line 329 of /usr/local/apache2/conf/httpd.conf: Can`t loacte API module staructure `mod_rewrite_module` in file
/usr/local/apache/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module
修改http.conf
原来:httpd.conf里面写的mod_rewrite_module
改成 rewrite_module
如果重启apache出现这个错误module
rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入,注释掉
#LoadModule rewrite_module modules/mod_rewrite.so
#####################################################
检查:
[root@www httpd-2.2.8]# ../bin/apachectl configtest
Syntax OK
这时,你的apache应该已经支持rewrite了。
Vim /usr/local/apache/conf/extra/httpd-vhosts.conf
重启apache
测试ok,
搞定!