header ('Location:'.__DIR__.'/view/prijava_view.php'
如果我在 index.php 文件中使用上面的标题,它只会显示一个带有“localhost”URL 的空白页面。如果我使用包含而不是标题,它会起作用。
这是DIR魔术常数的问题吗?看来您不能在标题中使用它,还是我的代码有问题?
header ('Location:'.__DIR__.'/view/prijava_view.php'
如果我在 index.php 文件中使用上面的标题,它只会显示一个带有“localhost”URL 的空白页面。如果我使用包含而不是标题,它会起作用。
这是DIR魔术常数的问题吗?看来您不能在标题中使用它,还是我的代码有问题?
__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 中使用。
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');
}
__DIR__
魔术常数适用于 php 5.3+ 。如果您的主机 php 版本不支持它,您应该dirname(__FILE__)
改用