APACHE mod_rewrite更改查询字符串中的变量名称

时间:2011-03-27 18:06:32

标签: php apache mod-rewrite get

我正在尝试更改查询字符串中的变量名,因此我的PHP代码可以使用它。

查询从外部系统获取帖子,因此我无法控制他们发布的变量名称中包含空格。这使我无法使用PHP $_GET函数。

我需要将variable%20name更改为?new1

我需要将variable2更改为new2

查询中传递了许多变量,但只需要更改这两个变量。其余的可以保持不变甚至消失。

所以?variable%20name=abc&variable2=xyz

最终需要?new1=abc&new2=xyz

此外,它们可能不是这个顺序,可能还有更多变量

那么?变量%20name = abc& blah = 123& blah2 = 456& variable2 = xyz

最终可以?new1=abc&new2=xyz

?new1=abc&blah=123&blah2=456&new2=xyz

无论哪种方式都没问题!

请告诉我 mod_rewrite 规则,以解决此问题。

提前谢谢!

1 个答案:

答案 0 :(得分:1)

使用mod_rewrite解析查询字符串有点痛苦,必须使用RewriteCond并在后续%n中使用RewriteRule替换,可能更容易在PHP中手动分解原始查询字符串。

可以在$_SERVER['QUERY_STRING']中找到完整的查询字符串(在PHP中)。

您可以使用preg_split()explode(),先&,然后=将其拆分,以获得键/值对。


custom%20cbid=123&blahblahblah&name=example为例。

$params = array();
foreach (explode("&", $_SERVER['QUERY_STRING']) as $cKeyValue) {
    list ($cKey, $cValue) = explode('=', $cKeyValue, 2);
    $params[urldecode($cKey)] = urldecode($cValue);
}

// Would result in:

$params = array('custom cbid' => 123,
                'blahblahblah' => NULL,
                'name' => example);