设为首页 收藏本站
查看: 392|回复: 0

[经验分享] Apache 配置 Rewrite, 顺便记录下编译添加新模块

[复制链接]

尚未签到

发表于 2017-1-9 10:19:46 | 显示全部楼层 |阅读模式
  Apache 1.x 的用户请检查 conf/httpd.conf 中是否存在如下两段代码:
  

清单 1. Apache 1.x 的加载模块代码




LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c

  Apache 2.x 的用户请检查 conf/httpd.conf 中是否存在如下一段代码:
  

清单 2. Apache 2.x 的加载模块代码




LoadModule rewrite_module modules/mod_rewrite.so

  如果存在,那么在配置文件(通常就是
conf/httpd.conf)中加入如下代码。此时请务必注意,如果网站使用通过虚拟主机来定义,请务必加到虚拟主机配置,即
<VirtualHost> 中去,如果加在虚拟主机配置外部将可能无法使用,改好后将 Apache 重启。稍后再解释这段代码的意思
  

清单 3. 加入配置文件的代码




LoadModule rewrite_module     modules/mod_rewrite.so
<IfModule rewrite_module>
RewriteEngine on
RedirectMatch ^(.*)/([^/]*)\.com$ $1/index.jsp?brand=$2
</IfModule>

  如果没有加载这个 mod_rewrite 模块,那多半就是 Apache 本身编译的时候就没有编译上 rewrite
模块了,那我们需要手工自己编译一下这个模块。
  先找到你的 Apache 最初编译的源代码目录,找到放 mod_rewrite.c 的目录,例如
:/usr/local/src/httpd-2.2.13/modules/mappers, 然后使用 Apache 安装好的 apxs
命令编译即可:


  

清单 4. 指向源代码目录的代码




/usr/local/apache2/bin/apxs -i -a -c ./mod_rewrite.c

  编译的过程如下:
  

清单 5. 编译过程的代码




/usr/local/apache2/build/libtool --silent --mode=compile gcc -prefer-pic 
 -DAP_HAVE_DESIGNATED_INITIALIZER -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread
-I/usr/local/apache2/include  -I/usr/local/apache2/include 
 -I/usr/local/apache2/include  -c -o ./mod_rewrite.lo
./mod_rewrite.c && touch ./mod_rewrite.slo
/usr/local/apache2/build/libtool --silent --mode=link gcc -o ./mod_rewrite.la 
 -rpath /usr/local/apache2/modules -module -avoid-version   
 ./mod_rewrite.lo
/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apache2/build/libtool'
./mod_rewrite.la /usr/local/apache2/modules
/usr/local/apache2/build/libtool
--mode=install cp ./mod_rewrite.la /usr/local/apache2/modules/
cp ./.libs/mod_rewrite.so /usr/local/apache2/modules/mod_rewrite.so
cp ./.libs/mod_rewrite.lai /usr/local/apache2/modules/mod_rewrite.la
cp ./.libs/mod_rewrite.a /usr/local/apache2/modules/mod_rewrite.a
chmod 644 /usr/local/apache2/modules/mod_rewrite.a
ranlib /usr/local/apache2/modules/mod_rewrite.a
PATH="$PATH:/sbin" ldconfig -n /usr/local/apache2/modules
----------------------------------------------------------------------
Libraries have been installed in:
  /usr/local/apache2/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/local/apache2/modules/mod_rewrite.so
[activating module `rewrite' in /usr/local/apache2/conf/httpd.conf]

  如果没有什么错误的话,会在 apache/modules 目录中编译出一个 mod_rewrite.so 文件。

同时
apxs 应该会自动编译并且部署到你的 Apache 目录,会在

vi
/usr/local/apache2/conf/httpd.conf 里加载:

LoadModule
rewrite_module    modules/mod_rewrite.so
  如果没有部署,你将 mod_rewrite.so 手工拷贝到的 Apache modules 目录下并且修改 httpd.conf
进行加载即可,例如:/usr/local/apache2/modules
  2. 接下来就可以用 rewrite 来将不同的访问 URL 参数化来处理了。Rewrite module
可以用一个正则表达式来匹配用户发送过来的 URL 请求,然后转换成另外一种形式的 URL 请求,然后再交给 Apache 去分发和处理修改后的
URL 页面请求。
  我们在 Apache 的 httpd.conf 里加入以下的 code 就可以达到这样的效果。
  

清单 6. URL 转换的代码




LoadModule rewrite_module     modules/mod_rewrite.so
<IfModule rewrite_module>
RewriteEngine on
RedirectMatch ^(.*)/([^/]*)\.com$ $1/index.jsp?brand=$2
</IfModule>

  熟悉正则表达式的读者,可以看到例子中的 RedirectMatch 后面跟的正则表达式会匹配
http://www.CRL.com/mycompany.com 然后转换为
http://www.CRL.com/index.jsp?brand=mycompany
  

图 1. 流程图

DSC0000.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-325883-1-1.html 上篇帖子: RHEL5整合Apache+Tomcat,支持jsp与php 下篇帖子: apache的tomcat负载均衡和集群配置 mod_jk
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表