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后的重写语句,奇怪了~不过暂时先这样,继续弄新英文站吧~