您的位置:首页 > 运维架构 > Apache

apache中url重写 例子

2010-04-09 15:40 141 查看
静态网页技术,也就是静态化所有的页面,一方面可以加快访问速度,又可以提高对搜索引擎的友好性.不过渐渐的发现很多网站地址里出现了很多"/",还有很多花样的文件和文件名出现,难道所有的网站都是这样做的吗?如:新浪,163等等.很多网站用了另一种欺骗手法和一种反向代理高速缓存技术.
所说的欺骗就是URL重写,在.net和java里面都有一些它们自己封装好的模块可以直接使用,很方便.不过,在PHP里面就没有这些封装好的东西,只有对它的环境里做改动,也就是在apache上做配置.

apache中有一个模块mod_rewrite,提供了重写的功能.里面有一些指令如:rewriterule,rewritecond,rewritebase,等等,指令是要分等级的,其中有一些是服务器级的,一些是目录级的.所谓服务器级的意思此指令作用于在此apache服务下所有的网站,指令写在httpd.conf里,目录级是只作用是于某目录下的,指令写在某目下的.htaccess文件里.详细的文档在http://free.xahxu.com.cn/Apache/mod/mod_rewrite.html里..

这里是我截了一小段例子:

RewriteEngine On
RewriteBase /
###############article_key_list.php#################

#<a href='article_key_list.php?cid=".$cid."'>
RewriteRule ^article_key_list_cid_(.*).htm$ article_key_list.php?cid=$1 [L]
#RewriteRule ^article_key_list/(.*)$ $1 [R,L]

#<a href='article_key_list.php?keyword=".$keyword."'>
RewriteRule ^article_key_list_keyword_(.*).htm$ article_key_list.php?keyword=$1 [L]
#RewriteRule ^article_key_list_keyword_(.*)$ $1 [R,L]

#<a href='content.php?id=".$id."' ^content_id_(.*).htm$ content.php?id=$1 [L]
#RewriteRule ^content/(.*)$ $1 [R,L]

第一句意思是把匹配^article_key_list_cid_(.*).htm$这个正则式的请求转到article_key_list.php?cid=$1

这个(.*)为参数传到$1.只把你页面的链接article_key_list.php?cid=2改为article_key_list_cid_2.htm就可以了.

上面的指令我是写在.htaccess里的,也就是目录级的指令,你把rewritebase/去了后也可以写在httpd.conf里,当然写后一种的速度要快些,它是在启动apache的时候就,一同载入内存了.前一种就在每次访问的时候,才将.htaccess载入,所以要慢一些.

经过我多次试验,发现在windows下不能使用目录级,就算用dos命令edit建立了名为.htaccess的文件.也起不了作用.但在linux下可以.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: