使用mod_rewrite将参数附加到查询字符串

时间:2011-02-03 15:00:25

标签: php apache .htaccess mod-rewrite

我想使用mod_rewrite将参数附加到查询字符串的末尾。我知道我可以使用[QSA]标志来做到这一点。

但是,如果查询字符串中不存在参数,我希望仅附加参数。所以,如果查询字符串是:

http://www.mysite.com/script.php?colour=red&size=large

我希望将上述网址重定向到

http://www.mysite.com/script.php?colour=red&size=large&weight=heavy

只有当这个特定参数不存在时,weight=heavy才附加到查询字符串的末尾!如果特定参数已在URL中,则不需要重定向。

任何人都可以建议将代码放入我的.htacess文件中吗?

2 个答案:

答案 0 :(得分:8)

编辑:测试并修改了它,现在它适用于我

我假设你想要在没有重量的情况下添加默认的权重参数:

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} !weight=
RewriteRule ^script.php     script.php?weight=heavy [R,L,QSA]

这与@coreyward所回答的基本相同,但更具体一点。 (R标志,使变化可见,重量参数不必很重。)

希望这有帮助!

答案 1 :(得分:5)

这是一件非常奇怪的事情。就好像你正在为你的系统设置一个默认值,这是一个非常标准的事情。问题是在你的VHost定义或.htaccess文件中设置默认值是不可维护和笨拙的。

我建议不要这样做,但这是一种快速而肮脏的方式来做你想要的事情:

RewriteCond %{QUERY_STRING} !weight=heavy
RewriteRule /script.php /script.php?weight=heavy [QSA]