在 PHP 中强制重定向到登录页面

Moh*_*lan 1 php

我正在为一个具有管理员面板的电子商务项目设置一个 Web 应用程序。如何强制并自动重定向到login.php而不是index.php?

例如,如果我确实遵循此路径http://localhost/project/admin(这将加载index.php)。

但是,当我尝试通过http://localhost/project/admin/login.phplogin.php手动打开时,登录过程成功运行并打开会话

文件夹结构:

在 Windows 10 上使用 XAMPP Panel v3.2

我已经尝试过以下方法:

登录.php

<?php
    session_start();
    include '../include/connection.php';

    if (isset($_POST['submit'])) {
        $email = $_POST['email'];
        $password = $_POST['password'];
        $query = "select * from admin where admin_email = '$email' AND admin_password = '$password'";
        $result = mysqli_query($conn,$query);
        $adminSet = mysqli_fetch_assoc($result);
        if ($adminSet['admin_id']) {
            $_SESSION['admin_id'] = $adminSet['admin_id'];
            header("location:index.php");
        }
        else {
            $error = "You are not authenticated.";
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

admin-header.php // 包含在index.php 中

<?php
    session_start();
    if (!isset($_SESSION['admin_id'])) {
        header("location:login.php");
    }
?>
Run Code Online (Sandbox Code Playgroud)

索引.php

<?php include '../include/admin-header.php'?>
Run Code Online (Sandbox Code Playgroud)

Acc*_*t م 5

选项1(目录索引)

在您的管理目录中,创建一个.htaccess包含以下内容的文件:

DirectoryIndex login.php
Run Code Online (Sandbox Code Playgroud)

选项2(重写规则)

在您的管理目录中,创建一个.htaccess包含以下内容的文件:

RewriteEngine On
RewriteRule index.php login.php [L]
Run Code Online (Sandbox Code Playgroud)

我测试了选项 2,如果您请求/admin/admin/或,它工作正常,在这 3 种情况下/admin/index.php您将被重定向到login.php

选项 3(HTTP 重定向)

让你index.php像这样:

<?php
    header("Location: login.php");
    exit;
Run Code Online (Sandbox Code Playgroud)

我不喜欢使用选项 3 来保存额外的 HTTP 请求。

确保您的 Apache 允许 .htaccess 文件

也检查这个问题