如何获取没有上下文路径的php请求URI?

时间:2012-05-04 17:10:51

标签: php

$_SERVER['REQUEST_URI']返回带有上下文路径的URI。

例如,如果网站的基本网址为http://localhost:8080/sitename/(即上下文路径为网站名称),并且$_SERVER['REQUEST_URI']使用http://localhost:8080/sitename/portfolio/design,则会返回/sitename/portfolio/design }。

然后我将结果爆炸以解释我的干净网址:

$page=$_SERVER['REQUEST_URI'];
$segments=explode('/',trim($page,'/'));

$sitePage = $segments[1];//portfolio

这适用于我的本地测试环境,但在生产服务器上,$segments[1]必须变为$segments[0]

为了在开发和生产中使用相同的代码,有没有办法只获得这部分/portfolio/design,即没有上下文路径的URI?

3 个答案:

答案 0 :(得分:9)

您可以使用虚拟主机,以便您的测试站点开启:

http://sitename.localhost:8080/

这样,绝对路径(相对于web-root)在测试服务器和生产服务器上将是相同的。

操作方法取决于您使用的测试服务器。

答案 1 :(得分:4)

我通过比较SCRIPT_NAMEREQUEST_URI来解决这个问题:

// /sitename/index.php
$path = explode('/', trim($_SERVER['SCRIPT_NAME'], '/'));

// /sitename/portfolio/design
$uri  = explode('/', trim($_SERVER['REQUEST_URI'], '/'));

foreach ($path as $key => $val) {
    if ($val == $uri[$key]) {
        unset($uri[$key]);
    } else {
        break;
    }
}

// portfolio/design
$uri = implode('/', $uri);

我猜你有.htaccess路由到index.php

希望有所帮助。

答案 2 :(得分:0)

我想说这是做你想做的事的方法 - 获取URI的一部分。

我建议你设置一个虚拟主机(假设你正在使用Apache),基于名称或地址。然后,您可以使用http://127.0.0.42/portfolio/design或者在系统上编辑主机文件,甚至http://sitename/portfolio/design。那么你的开发环境将类似于生产环境。

希望有所帮助。