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

Php 使用mod_rewrite将参数附加到查询字符串,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,我想使用mod_rewrite将一个参数附加到querystring的末尾。我知道我可以使用[QSA]标志来实现这一点 但是,我只希望在querystring中不存在该参数时附加该参数。因此,如果查询字符串是: http://www.mysite.com/script.php?colour=red&size=large 我想上述网址被重新定向到 http://www.mysite.com/script.php?colour=red&size=large&weight=h

我想使用mod_rewrite将一个参数附加到querystring的末尾。我知道我可以使用[QSA]标志来实现这一点

但是,我只希望在querystring中不存在该参数时附加该参数。因此,如果查询字符串是:

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文件中,这样做真的很奇怪。这就好像你正在为你的系统设置一个默认值,这是一个非常标准的事情。问题是,在VHost定义或.htaccess文件中设置默认值是不可维护的,而且很尴尬,因为您实际上是在配置Apache

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

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

编辑:对其进行了测试和修改,现在它适用于我

如果根本没有权重,我假设您希望添加默认权重参数:

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} !weight=
RewriteRule ^script.php     script.php?weight=heavy [R,L,QSA]
这与@coreyward的回答本质上是一样的,但更具体一点。(R标志,使更改可见,并且权重参数不必太重。)


希望这有帮助

嗨,谢谢你的回答。你是对的,我正在寻找一个快速而肮脏的解决方案。很遗憾,我无法使您的代码正常工作,但我可以看到您的目标…您好,感谢您对代码的澄清。我将它添加到.htaccess中,但不幸的是,我无法让它工作!我确实启用了mod_重写功能。。干杯。稍加修改并测试。现在对我有用。