Apache url重写问题记录

由于网站需要做一个英文站点,访问路径想用www.mysite.com/en/这样开头的就是英文站点,由于英文站点和中文站只是模板的说明文字变成英文,所以需要重定向一下这个地址,实现

www.mysite.com/en/index.php->www.mysite.com/index.php?en=1

www.mysite.com/en/blog.php?id=1->www.mysite.com/blog.php?id=1&en=1

这样的跳转,同时浏览器的url不变

之前一直是用的别人的rewrite规则修改下就ok的。但是之前的rewrite规则没有以上类似的跳转,只好google~

照着写了个规则

rewriterule ^en/(.*?)$    /$1\?en=1 [nc]

但是这样的规则对于已有参数的跳转错误

www.mysite.com/en/blog.php?id=1->www.mysite.com/blog.php?en=1 ,参数信息没了~继续看apache的mod_rewrite的文档,名词相对来说比较晦涩,不是那么好懂,幸好google了之后看到参数信息是在这个变量里的%{query_string},于是修改为

rewriterule ^en/(.*?)$    /$1\?%{query_string}&en=1 [nc]

这样基本上是可以了,不过当没有参数的时候后边的参数变成了?&en=1这个相当的不好看啊,

然后注意到了RewriteCond 这个指令,意思就是rewrite condition,重写条件


rewritecond %{query_string} -s [nc]
rewriterule ^en/(.*?)$   /$1\?en=1 [nc]

rewritecond %{query_string} !-s [nc]
rewriterule ^en/(.*?)$    /$1\?%{query_string}&en=1 [nc]

照着写成这样,不过这个-s !-s 很是诡异啊,我的理解是-s代表了条件是为空,但是第一个条件在query_string为空的时候没有执行,依然执行了!-s后的重写语句,奇怪了~不过暂时先这样,继续弄新英文站吧~

posted @ 2012-02-07 10:24  血色舞  阅读(186)  评论(0编辑  收藏  举报