QUERY_STRING仅显示第一个参数

时间:2017-05-08 23:51:22

标签: php .htaccess mod-rewrite query-string

我只能访问我的第一个网址参数。我想是因为我的RewriteRule以及QUERY_STRING都有&符号。如何在PHP脚本中正确访问每个参数?

我正在向

提出请求
http://example.com/subdir/api/transport/1/car?type=fast&color=blue"

在我的.htaccess文件中,我有以下一行:

RewriteRule ^(.+)$ index.php?q=%{REQUEST_URI}&params=%{QUERY_STRING}&api=$1 [L]

在我的PHP中,显示json_encode($_GET)会产生:

 {"q":"\/subdir\/api\/transport\/1\/car","params":"type=fast","color":"blue","api":"transport\/1\/car"}

您会注意到“颜色”:“蓝色”不再具有等号,并且不包含在“params”中。

如果我因此显示`json_enocde($ _ GET ['params']),我得到的是以下内容:

"type=fast"

如何获取全套参数?这是我的.htaccess或我的PHP文件的问题吗?

2 个答案:

答案 0 :(得分:1)

如果要修改查询参数,则不需要使用%{QUERY_STRING}标记在目标中使用QSA,如果要修改查询参数,则将现有查询字符串附加到目标。

您可以将您的规则用作:

RewriteRule ^(.+)$ index.php?q=%{REQUEST_URI}&api=$1 [L,QSA]

答案 1 :(得分:0)

好吧,如果你考虑发生的转变:

index.php?q=%{REQUEST_URI}&params=%{QUERY_STRING}&api=$1

变为:

index.php?q=/subdir/api/transport/1/car&params=type=fast&color=blue&api=transport/1/car"

因此,对于当然,您可以获得$_GET

我要做的是将重写更改为:

index.php?q=%{REQUEST_URI}&%{QUERY_STRING}&api=$1

然后在你的代码中你会得到:

{
    "q":"\/subdir\/api\/transport\/1\/car",
    "type": "fast",
    "color":"blue",
    "api":"transport\/1\/car"
}

如果你想要参数,你可以从q中删除api$_GET个键。