0
header ('Location:'.__DIR__.'/view/prijava_view.php'

如果我在 index.php 文件中使用上面的标题,它只会显示一个带有“localhost”URL 的空白页面。如果我使用包含而不是标题,它会起作用。

这是DIR魔术常数的问题吗?看来您不能在标题中使用它,还是我的代码有问题?

4

3 回答 3

8

__DIR__是文件系统路径。它与客户端浏览器将看到的 URL 无关。如果您网站的文件物理存储在

/home/sites/example.com/html/view/projava_view.php

这个 php 脚本中的代码查看DIR,你会得到

/home/sites/example.com/html/view/

如果您通过 header() 将其传递出去进行重定向,您将重定向到文件系统路径

header("Location: http://example.com/home/site/example.com/html/view/.....");

外部用户无法访问。该路径不在您的文档根目录内,浏览器实际上将请求完整路径,然后服务器将再次在文档根目录上添加该路径,因此完整的最终请求实际上是

/home/sites/example.com/html/view/home/sites/example.com/html/view/projava_view.php

一般来说,__DIR__魔术常量在尝试构建 URL 空间路径时完全没用,因为它不适合在 URL 中使用。

于 2013-09-03T16:55:29.363 回答
1
function redirect_by_path($path)
{
    $redirect = substr(strtr(realpath($path), '\\', '/'), strlen($_SERVER['DOCUMENT_ROOT']));
    header("location: $redirect");
    exit;
}

用法:

redirect_by_path(__DIR__ . '/../../login.php');
if (!is_logged_in())
{
    redirect_by_path(__DIR__ . '/../../login.php');
}
于 2022-01-08T10:44:05.237 回答
0

__DIR__魔术常数适用于 php 5.3+ 。如果您的主机 php 版本不支持它,您应该dirname(__FILE__)改用

于 2013-09-03T17:14:54.543 回答