根据日期拒绝访问某些页面

根据日期拒绝访问某些页面

.htaccess是否可以根据当前日期拒绝访问某些页面?

事情是这样的。我已在我的网站上实施了愚人节系统(它基本上会在每年 4 月 1 日显示一些有趣的页面,旨在愚弄访问者刚刚发生的事情 - 任何不好的事情 - 并在重新加载页面后使用会话 ID 显示实际的网站)。

我想让访问者使用自定义目录列表索引页查看过去的愚人节页面,该索引页不列出即将打开的页面(显然,如果它应该是一个惊喜)。但我想锁定即将打开的页面,以便访问者无法使用直接访问(在浏览器地址栏中手动输入他们的地址)显示即将打开的页面。

页面使用 的命名方案命名year.php(因此每年都有自己的愚人节页面)。 每个页面都显示在特定日期 - 即当年的 4 月 1 日。 我想拒绝访问那些未通过当前愚人节季节的页面。 所以现在是 2018 年。 我准备了 2019 年的愚人节页面(名为2019.php)。 如果访问者输入地址example.com/april_fools_dir/2019.php,它应该向他显示Access Denied错误,直到 2019 年 4 月 1 日。 不想在每个页面中单独实现它,也不想让每个页面依赖于实现此功能的包含部分。 如果可以在 中使用它,我想避免在 PHP 中实现它.htaccess。 我可以自己弄清楚 PHP 实现,但我想避免那样做......

为什么我需要这样的功能,即在特定日期之前拒绝某些页面?这是一个战略举措。我不想让那些只进行调查的访问者试图访问尚未在历史记录页面中列出的页面,从而破坏即将到来的愚人节页面。它只会抛出一个Access Denied错误,并且该页面将在特定年份的愚人节过后公开。

答案1

好的,我找到了 PHP 的实现方法。我只需调用此函数并输入具体年份即可:

function deny_access($year) {
    $current_date = [
        'day' => date("d"),
        'month' => date("m"),
        'year' => date("Y")
    ];

    if($current_date['month'] < 4) {
        if($current_date['year'] <= $year) {
            header('403 Forbidden', true, 403);
            exit();
        }
    } else {
        if($current_date['year'] < $year) {
            header('403 Forbidden', true, 403);
            exit();
        }
    }
}

然后在每个页面中包含并调用此函数。结果是403 ForbiddenHTTP 请求,完全符合我的预期。将其导入我的网站后,响应是500 Internal Server Error(可能是因为它无法处理 PHP 强制403 Forbidden响应),但没关系,它实际上比预期的还要好……

编辑:我忘了说,修改给定的年份会改变 HTTP 响应。我想试试看,如果愚人节页面设置为已过(降低年份),并且页面显示完全正常工作,服务器将如何响应。因此,唯一给出原本意想不到的500 Internal Server Error响应的是deny_access($year)满足 HTTP 响应调用条件的函数403 Forbidden。所以我不必担心,它按预期工作 = 在准备好显示之前拒绝访问。

相关内容