部分URL重写规则

 

想了好几天,终于决定好了URL的重写方案,使用了更加符合真正静态文件思路的目录层次和静态html文件的方式对日志模块的几个最重要部分进行了重写。

详细内容 /blog/article/22.html 实际地址为 /?m=blog&a=article&id=22

存档日志 /blog/archive/2007-09.html 实际地址为 /?m=blog&a=archive&year=2007&month=09 无分页

标签云(标签列表) /blog/tag/ 实际地址为 /?m=blog&a=tagcloud

标签 /blog/tag/GPWS/ 实际地址为 /?m=blog&a=tag&tag=GPWS 无分页

就重写了这几个页面。

过程中比较深刻的几点体会:

1. 如果需要重写页面为不同层次的目录,需要注意两个问题:一是链接地址,二是cookie的有效路径。

2. 链接的地址需要使用相对根目录“/”而不能使用相对当前目录的地址,例如图片目录应该用“/images/”表示而不是“images/”或“./images/”。

3. PHP的setcookie函数设置的path默认为脚本的当前目录,所以需要在setcookie函数里面指定cookie的有效路径为站点根目录,如有需要可以设置在整个域范围有效。

4. RewriteRule重新规则是不会匹配QueryString的,但是你可以在替换的地址上加上原来的QueryString, 虽然一般都变成静态化了并不需要带参数,但是有某些特殊需求的就要,例如我需要自动给URL传递会话id,即使是如 /blog/article/22.html?sid=xxxxxx这样的地址也可以传递参数。如果需要对QuerySting进行匹配,可以结合 RewriteCond来实现。

下面是我的重写规则,可以放在.htaccess文件里面。

##为不带斜杠结束的地址添加斜杠
RewriteRule ^blog$blog/?%{QUERY_STRING} [R]
RewriteRule ^blog/([^/.]*[^/./])$blog/$1/?%{QUERY_STRING} [R]
##日志 
RewriteRule ^blog/$index.php?m=blog&%{QUERY_STRING} [L]
RewriteRule ^blog/article/$blog/ [R]
RewriteRule ^blog/article/([0-9]+)/.html$index.php?m=blog&a=article&id=$1&%{QUERY_STRING} [L]
##日志 - 存档 
RewriteRule ^blog/archive/$blog/ [R]
RewriteRule ^blog/archive/([0-9]{4})-([0-9]{2})/.html$index.php?m=blog&a=archive&year=$1&month=$2&%{QUERY_STRING} [L]
##日志 - 标签 
RewriteRule ^blog/tag/$index.php?m=blog&a=tagcloud&%{QUERY_STRING} [L]
RewriteRule ^blog/tag/([^/]+)/$index.php?m=blog&a=tag&tag=$1&%{QUERY_STRING} [L]

还有一句是可以自动给所有不以斜杠结尾的路径自动添加斜杠的,但是由于匹配的范围太大,可能会影响性能,不过不了解Rewrite引擎的运作方式,我也不清楚。

RewriteRule ^([^/.]*[^/./])$/$1/ [R]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值