如果某个页面返回404,则使用.htaccess限制对目录的访问

时间:2013-04-12 00:10:14

标签: php apache .htaccess http-headers

我试图拒绝访问整个目录,除非文件(可能在哪里)返回200状态。这需要写在我的.htaccess文件中。我知道这是无效的.htaccess语法,除了deny from all部分,我只是在展示我的概念。

if(external-page.php returns anything but 200 header)
{
    # deny the current directory
    deny from all
}

external-page.php 将运行一个脚本,用于检查用户是否具有有效凭据。如果他们这样做,它将加载具有200状态的页面。如果他们不是有效用户,则会返回404状态。

.htaccess文件位于我想要拒绝的目录中,但是,我要检查状态的脚本不在该目录中。

提前致谢。

更新:因为似乎有些混乱。我在下面列出了我的目录结构:

DIRECTORY_A/
    DIRECTORY_B/
        .HTACESS
        FILE_1.PHP
        FILE_2.PHP
        FILE_3.PHP
    FILE_A.PHP

基于这个目录结构,我想要做的是......如果FILE_A.PHP返回404(或者它可以返回任何内容,只要我可以检查它)。然后我想拒绝对DIRECTORY_B的所有访问权限。如果FILE_A.PHP返回200(或者是真的,或者我可以检查的任何内容),那么我想允许访问DIRECTORY_B

如果使用.htaccess不是实现此目的的最佳方法,那么我对另一种方法持开放态度。但是,我无法将代码放入FILE_1.PHPFILE_2.PHP以及FILE_1.PHP ...这就是为什么我要限制对整个DIRECTORY_B目录的访问。

2 个答案:

答案 0 :(得分:2)

你不能做这种依赖.htaccess不是一个脚本

答案 1 :(得分:1)

执行所需操作的常用方法是拥有一个包含在所有PHP文件中的身份验证php脚本并检查会话。 当您在另一个PHP文件中包含一个PHP文件时,它将被执行。

因此,FILE_A.php将具有身份验证代码,并由FILE_1.php,FILE-2.php,FILE_3.php包含。

您不需要.htaccess,因为您可以直接从PHP设置标题(例如禁止)。

  • e.g。 header('HTTP / 1.1 403 Forbidden');

见:

只是为了好玩,你可以做以下事情:

  • 在FILE_A.php中进行身份验证,并根据结果设置标头。
  • 从其他php文件中包含FILE_A.PHP。
  • 在其他文件中使用var_dump(http_response_code())来检测FILE_A.php设置的标头并显示不同的输出。