★需求实现
之前搭建discuz时候使用的域名为www.caoyue111.com
现在我们要求实现访问域名www.hera111.com 时跳转到www.caoyue111.com
★配置步骤
我们只需在相应的虚拟主机中加入以下内容
vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<IfModule mod_rewrite.c> <== 打开rewrite.c模块(可用apachectl -M查看有无此模块)
RewriteEngine on <== 开启
RewriteCond %{HTTP_HOST} ^www.hera111.com$ <== 条件
RewriteRule ^(.*)$ http://www.caoyue111.com/$1 [R=301,L] <== 结果
</IfModule>
使用-t选项检查配置有无错误
重启apache服务
★我在浏览器中测试发现配置的内容没有生效,通过检查发现我系统中安装的apache里没有mod_rewrite模块,下面介绍单独为apache安装mod_rewrite模块的方法
首先进入apache的源码目录
我之前下载的apache源码目录存放在了/usr/local/src/下
使用find命令在当前目录下查找mod_rewrite模块
[root@yue httpd-2.2.16]# find . -name mod_rewrite.c
./modules/mappers/mod_rewrite.c
进入包含mod_rewrite的目录
[root@yue httpd-2.2.16]# cd ./modules/mappers/
/usr/local/apache2/bin/apxs -c mod_rewrite.c <== 此命令一定要在包含此模块的目录下进行
[root@yue mappers]# /usr/local/apache2/bin/apxs -c mod_rewrite.c
/usr/local/apr/build-1/libtool --silent --mode=compile gcc -std=gnu99 -prefer-pic -DLINUX -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/local/apache2/include -I/usr/local/apr/include/apr-1 -I/usr/local/apr/include/apr-1 -c -o mod_rewrite.lo mod_rewrite.c && touch mod_rewrite.slo
mod_rewrite.c: In function ‘lookup_variable‘:
mod_rewrite.c:1915: error: ‘conn_rec‘ has no member named ‘remote_ip‘
mod_rewrite.c:1954: error: ‘conn_rec‘ has no member named ‘remote_addr‘
mod_rewrite.c: In function ‘rewritelock_create‘:
mod_rewrite.c:2530: warning: implicit declaration of function ‘unixd_set_global_mutex_perms‘
apxs:Error: Command failed with rc=65536
了解到提示此类报错信息可能与libtool的版本有关,然后我发现在目录/usr/local/apache2/build下并没有libtool文件,然后我重新编译了apache
重新编译apache后增减了很多静态编译的文件,但是我查看/usr/local/apache2/build这时候还是没有libtool文件,继续往下做
cd /usr/local/src/httpd-2.2.16/modules/mappers/
/usr/local/apache2/bin/apxs -c mod_rewrite.c
[root@yue mappers]# /usr/local/apache2/bin/apxs -c mod_rewrite.c
/usr/local/apr/build-1/libtool --silent --mode=compile gcc -prefer-pic -DLINUX -D_REENTRANT -D_GNU_SOURCE -D_LARGEFILE64_SOURCE -g -O2 -pthread -I/usr/local/apache2/include -I/usr/local/apr/include/apr-1 -I/usr/local/apr/include/apr-1 -c -o mod_rewrite.lo mod_rewrite.c && touch mod_rewrite.slo
/usr/local/apr/build-1/libtool --silent --mode=link gcc -o mod_rewrite.la -rpath /usr/local/apache2/modules -module -avoid-version mod_rewrite.lo
好像成功了,,
chmod 755 /usr/local/apache2/modules/mod_rewrite.so 更改权限
查看/usr/local/apache2/modules下的文件发现确实有了mod_rewrite.so
这个时候我重启apache,出现错误提示
httpd: Syntax error on line 66 of /usr/local/apache2/conf/httpd.conf: module authn_file_module is built-in and can‘t be loaded
报错原因是:虽然apache需要加载authn_file_module模块但是现在这个模块已经是内置的了,不需要再Load module,因此apaache的配置文件中不需要有加载此模块的那一行了,因此将那一行注释掉就好。
查看apache所有的内置模块,/usr/local/apache2/bin/httpd -l
[root@yue logs]# /usr/local/apache2/bin/httpd -l
Compiled in modules:
core.c
mod_authn_file.c <== 已经在内置模块中存在了
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_include.c
mod_filter.c
mod_log_config.c
mod_env.c
mod_setenvif.c
mod_version.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c
当将提示的模块全都注释掉时,又提示了错误
[root@yue logs]# /usr/local/apache2/bin/apachectl start
httpd: Syntax error on line 147 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: undefined symbol: ap_log_rerror_
在百度上了解到的解决方法是与selinux有关,但是我当前的selinux就是disabled并且尝试用此方法后并没有解决。
这时候我把第147行注释掉了,发现apache2/bin下的命令可用了
原文:http://caoyue.blog.51cto.com/9876038/1614560