2017-05-08 93 views
1

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

我正在给

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"} 

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

如果我因此显示`json_enocde($ _ GET [ 'PARAMS'])我得到的是这样的:

"type=fast" 

我能做些什么来获取全套的参数?这是我的.htaccess或我的PHP文件的问题?

+1

您的规则应改为:'重写规则^(+)$的index.php Q =%{REQUEST_URI}&API = $ 1 [L,QSA] ' – anubhava

+1

@anubhava谢谢,这对我们有很大的帮助。起初,我被逗号后的空格卡住了,但没有完美的空间。你想发布一个答案让我接受吗? – kojow7

回答

1

你不需要使用QSA标志追加现有的查询字符串的目标,如果你正在修改的查询参数使用%{QUERY_STRING}的目标。

你可以用你的规则为:

RewriteRule ^(.+)$ index.php?q=%{REQUEST_URI}&api=$1 [L,QSA] 
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" 
} 

如果你想PARAMS,然后你可以只取出qapi您的$_GET的密钥。