LAMP(3)--apache配置域名跳转

★需求实现

  之前搭建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下的命令可用了


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。