3

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

例如,如果一个网站的基本 URL 是http://localhost:8080/sitename/(即上下文路径是站点名称),并且我使用$_SERVER['REQUEST_URI']for http://localhost:8080/sitename/portfolio/design,它将返回/sitename/portfolio/design.

然后我将结果分解以解释我的干净 URL:

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

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

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

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

4

3 回答 3

9

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

http://sitename.localhost:8080/

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

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

于 2012-05-04T17:13:43.540 回答
4

我通过比较解决了这个SCRIPT_NAME问题REQUEST_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

希望有帮助。

于 2012-10-23T23:30:11.003 回答
0

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

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

希望有帮助。

于 2012-05-04T17:21:46.620 回答