PHP GET变量`/`而不是`?`

时间:2011-11-30 03:16:44

标签: php variables get

我正在处理一个不允许在URL中使用$_GET[]个变量的脚本(这是我发布的引用网址,我需要有一些方法来跟踪它)。我不能举例如domain.com/index.php?id=test。但是我可以这样做domain.com/index.php/idd=test

我的问题是,如果我使用/代替?并将其视为get变量。我如何从网址获取变量。什么是一个简单的方法来做到这一点

5 个答案:

答案 0 :(得分:4)

如果你有这样的网址:

http://example.com/index.php/whatever

然后/whatever通常称为PATH_INFO,可用作:

print $_SERVER["PATH_INFO"]

请注意,某些环境(CGI)可以在实际的path_info不存在时将其设置为占位符值(request_uri)。 (另请参阅有关环境变量http://php.net/manual/en/reserved.variables.server.php的PHP手册以及有关PATH_INFO和PATH_TRANSLATED的说明。)

.htaccess: php_value arg_separator.input &;/
# Else strtr(..., "/", "&")

parse_str($_SERVER["PATH_INFO"], $_GET);

应该填充$ _GET。

答案 1 :(得分:2)

没有“简单”的方法来替换$ _GET参数的整个功能,但是有一些尴尬的黑客攻击,至少在Apache下。鉴于你不能使用$ _GET参数,我假设你也没有访问mod_rewrite,但谁知道。

http://www.example.com/index.php/foo/bar/baz之类的请求 将在$ _SERVER超全局中生成以下项目:

[REQUEST_URI] => /index.php/foo/bar/baz
[SCRIPT_NAME] => /index.php
[PATH_INFO] => /foo/bar/baz

理论上,您可以通过拆分“/”来解析$ _SERVER ['PATH_INFO'],循环遍历该数组并拆分“=”(假设您仍将使用key = value结构)。

但请注意,不稳定的URL结构的副作用是文档中的相对链接将变得相对于不稳定的URL,因此像

这样的图像

<img src="images/myimage.jpg">

将尝试加载http://www.example.com/index.php/foo/bar/images/myimage.jpg

使用绝对网址(http://www.example.com/images/myimage.jpg)或根相对网址(/images/myimage.jpg)可以避免这种情况。

但基本上,你要求一个麻烦的世界......并进行故障排除。

答案 2 :(得分:1)

$segments = explode("/", $_SERVER['REQUEST_URI']);
然后你从那里决定。来自$ segment的每个结果都可以以相同的方式进行操作。例如,您可以选择执行id = test或id,并始终知道$ segments [2]是id。你的电话。

你应该看看mod_rewrite。你需要将调用重定向到一个文件,因为如果不允许你获取vars,这个方法将不允许任何超过.php的内容。 (假设通过一些配置?以及未读取)

基本上将所有内容重新路由到index.php,如果这是你的一个控制器。

答案 3 :(得分:1)

你可以像这样解析它:

$uriParts = array_reverse((array) explode('/', $_SERVER['REQUEST_URI']));
$GET = explode('=', $uriParts[0]); // however you wanted to parse it form here

根据需要使用它,只需知道$uriParts[0]将包含id=whatever

答案 4 :(得分:1)

您需要做的是解析$_SERVER['REQUEST_URI'],然后执行您需要的操作。

从你的例子中你需要这样的东西:

//get rid of "/index.php
$uri = substr($_SERVER['REQUEST_URI'], 11);
//explode incase there are other parameters
$arr = explode('&', $uri);
$token = array();
foreach($token as $t){
    $part = explode('=', $t);
    $token[$part[0]] = $part[1]
}