问题描述:
在编译安装完了apache之后,发现需要rewrite功能,但是用/usr/local/apache2/bin/apachectl -M
命令发现没有rewrite_module 。
解决办法:
- 重现编译apache
你可以查看/usr/local/apache2/build/config.nice 这个文件来查看你apache的编译参数,然后重新编译你只需要添加--enable-rewrite
参数就行。
- 手动添加mod_rewrite模块
首先在apache的源码安装目录中寻找mod_rewrite.c文件
# find / -name mod_rewrite.c
/usr/local/src/httpd-2.2.12/modules/mappers/mod_rewrite.c //apache的源码安装目录中的mod_rewrite.c文件
# cd /usr/local/src/httpd-2.2.12/modules/mappers/
# /usr/local/apache2/bin/apxs -c mod_rewrite.c //apxs应指定绝对路径,在你编译安装apache的bin目录里
# /usr/local/apache2/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。
重启apache的过程中你可能还会遇到如下问题:
httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `mod_rewrite_module' in file /usr/local/apache2/modules/mod_rewrite.so: /usr/local/apache2/modules/mod_rewrite.so: undefined symbol: mod_rewrite_module
或者
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/apache2/modules/mod_rewrite.so:/usr/local/apache2/lib/libapr-0.so.0:undefined symbol:mod_rewrite_module
解决方法如下:
修改 httpd.conf,将
LoadModule mod_rewrite_module modules/mod_rewrite.so
改为
LoadModule rewrite_module modules/mod_rewrite.so
如果重启apache出现这个错误 module rewrite_module is built-in and can`t be loaded
表示模块是内建的,不用再调入,注释掉:
#LoadModule rewrite_module modules/mod_rewrite.so
语法检查:
# /usr/local/apache2/bin/apachectl configtest
Syntax OK
这时,你的apache应该已经支持rewrite了。
需要注意的配置,配置虚拟主机的时候要类似如下设置才可以生效:
<VirtualHost *:80>
DocumentRoot /var/www/www/devopsh/
ServerName www.fashengba.com
<Directory /var/www/www/devopsh/>
Options FollowSymLinks
AllowOverride All
order allow,deny
Allow from all
</Directory>
</VirtualHost>
如果AllowOverride设置为none的话,apache会不读取网站的.htaccess
文件!
上面虚拟主机只是针对指定文件夹可以读取到.htaccess
文件了,如果要针对所有的文件夹都支持.htaccess
,修改主配置文件httpd.conf,修改如下:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>
把AllowOverride None
改成AllowOverride All
这样所有的文件夹都支持.htaccess
了。

本文由 空心菜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Sep 9, 2019 at 12:35 pm