Apache的Rewrite模块
[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 个评论!
![Apex[有所思,有所志]](http://apex.ncksoft.com/wp-content/themes/deepwater/images/dw_site_logo.png)
oicqonly 说:
谢谢,我这的http.conf 原本是
Options Indexes FollowSymLinks Includes ExecCGI
因此无需修改Options Indexes FollowSymLinks项了。
还是感谢~
Apex[有所思,有所志] » Blog Archive » 关于Apache的mod_rewrite模块 说:
[…] 很久以前写过一篇《Apache的Rewrite模块》,但那时是Mambo内部完成的参数解析,我一直没有花时间去真正搞清楚rewrite机制是如何进行的。最近做网站需要自己来做rewrite,所以又复习了一遍。 […]