« 上一篇: 重构时遇上STL 下一篇: 出差在外 »

Apache的Rewrite模块

分类: 代码人生 | 472 次点击 | 发表评论
作者: Apex 发表于

[2006-10-11] 当时学习Rewrite模块是为Mambo准备的,现在使用WordPress,其后台也支持使用Rewrite来“搜索引擎URL友好”,所以下面的文字还是有点用的。

都说Apache的URI重写功能超强,那么我也来学习学习。

我的机器(测试用)是WindowsXP,但是Web服务使用的Apache2+PHP5+MySQL4,于是配置了一把,并将过程写在下面。

首先配置Apache。因为Windows下确省安装的Apache并没有加载重写模块。(Linux下是否缺省打开,目前未知)。需要修改httpd.conf文件:

找到下面这一行:

#LoadModule rewrite_module modules/mod_rewrite.so

将前面的注释符号(’#')去掉。在网上查到的资料说,还需要加入”Addmodule mod_rewrite.c”这一行,但是在Apache 2的配置文件中没有其他的Addmodule的说明,估计资料是针对Apache v1.3x的,我就没有加这一行。

 

(因为修改了Apache的配置,所以重启Apache服务……)

 

利用Mambo的“搜索引擎URL友好”功能来测试Apache的URI重写功能。重写的规则由.htaccess决定。我对.htaccess一窍不通,但是幸好Mambo已经作了准备,在Mambo的根目录下有一个htaccess.txt,只需要将其改名为.htaccess即可(Windows的资源管理器不能这样改名,但是控制台下可以)。改名后,还需要对.htaccess略作修改:将

# RewriteBase /YourMamboDirectory

前面的#去掉,然后将“/YourMamboDirectory”改为Mambo的所在路径,注意,是相对站点根路径的相对路径。例如,访问我的Mambo使用:

http://my.test.com/mambo/

那么这里需要将“/YourMamboDirectory”改为“/mambo”。我一开始没有注意,结果总是出错。

好了,修改完成,存盘退出(修改.htaccess无需重启Apache),刷新首页,原来的链接如

http://my.test.com/mambo/index.php?content=14&id=30

已经被Mambo改写为

http://my.test.com/mambo/content/view/14/30/

(类似于静态网址了)。点击一个链接……

……

……(汗ing…)

失败了,404错误,找不到网页!!

没办法,不知道问题所在,谁让我是半罐水呢~~~~

后来想起来,就去打开Apache的访问日志和错误日志,噫?怎么请求的URI还是原来的??

难道是Apache的rewrite没有启用?又去网上搜索了一番,哦,原来还需要允许.htaccess重载Apache的设定项才行啊。如下:

修改Apache的httpd.conf,将

    Options Indexes FollowSymLinks     AllowOverride None

改为

    Options Indexes FollowSymLinks     AllowOverride all

然后再次重启Apache,刷新页面,点击链接,OK搞定,收工。

结论1:心要细,胆要大。

结论2:搞不定就去google上搜。

目前有 2 个评论!


  1. oicqonly 说:

    谢谢,我这的http.conf 原本是
    Options Indexes FollowSymLinks Includes ExecCGI
    因此无需修改Options Indexes FollowSymLinks项了。
    还是感谢~


  2. Apex[有所思,有所志] » Blog Archive » 关于Apache的mod_rewrite模块 说:

    […] 很久以前写过一篇《Apache的Rewrite模块》,但那时是Mambo内部完成的参数解析,我一直没有花时间去真正搞清楚rewrite机制是如何进行的。最近做网站需要自己来做rewrite,所以又复习了一遍。 […]

敬请留言:

您可以使用下列XHTML标签:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>