我正在处理一个不允许在URL中使用$_GET[]
个变量的脚本(这是我发布的引用网址,我需要有一些方法来跟踪它)。我不能举例如domain.com/index.php?id=test
。但是我可以这样做domain.com/index.php/idd=test
我的问题是,如果我使用/
代替?
并将其视为get变量。我如何从网址获取变量。什么是一个简单的方法来做到这一点
答案 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]
}