$_SERVER['REQUEST_URI']
返回带有上下文路径的URI。
例如,如果一个网站的基本URL是http://localhost:8080/sitename/
(即上下文路径是sitename),而我使用$_SERVER['REQUEST_URI']
表示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?
您可以使用虚拟主机,以便您的测试站点位于:
http://sitename.localhost:8080/
这样,测试服务器和生产服务器上的绝对路径(相对于 Web 根目录)将是相同的。
操作方法取决于您使用的测试服务器。
我通过比较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路由到索引.php
希望有帮助。
我会
说这是做你想要的方法 - 获取URI的一部分。
我建议您设置一个虚拟主机(假设您使用的是Apache),基于名称或地址。然后,您可以拥有类似 http://127.0.0.42/portfolio/design 的东西,或者甚至可以 http://sitename/portfolio/design 对系统上的主机文件进行一些编辑。然后,您的开发环境将类似于生产环境。
希望有帮助。