Ограничить доступ к каталогу, используя .htaccess, если какая-то страница возвращает 404

Я пытаюсь запретить доступ ко всему каталогу, если только файл (где бы он ни находился) не возвращает статус 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 (или true, или что-то еще, что я могу проверить), я хочу разрешить доступ к DIRECTORY_B

Если использование .htaccess не лучший способ добиться этого, я открыт для другого метода. Однако мне запрещено размещать код в FILE_1.PHP, FILE_2.PHP и FILE_1.PHP... поэтому я хочу ограничить доступ ко всему каталогу DIRECTORY_B.


person doitlikejustin    schedule 12.04.2013    source источник
comment
Вы хотите 404 или 200...?   -  person Menelaos    schedule 12.04.2013
comment
Я бы предпочел проверить статус 200, но могу проверить и статус 404. Либо один хорошо.   -  person doitlikejustin    schedule 12.04.2013
comment
Зачем?!! какая от этого польза? если файлы в этом каталоге передаются через сценарий, ваш отказ от всех не поможет вам что-либо сделать, если нет, то вы фактически запрещаете доступ всем пользователям, включая действительных.   -  person ahmad    schedule 12.04.2013
comment
Вы имеете в виду, что хотите запретить людям просматривать файлы в вашем каталоге?   -  person Menelaos    schedule 12.04.2013
comment
@meewoK да ... только если скрипт, который я проверяю за пределами этого каталога, возвращает статус 404   -  person doitlikejustin    schedule 12.04.2013
comment
@ahmad Нет, не будет. Сценарий, который я проверяю, находится ВНЕ этого каталога. Причина, по которой мне нужно сделать это таким образом, заключается в том, что мне нужно запретить доступ к группе классов на основе того, вошел ли пользователь WordPress в систему. Все, что я пробовал внутри класса, ломает класс.   -  person doitlikejustin    schedule 12.04.2013
comment
Можете ли вы дать нам немного больше информации... что вы используете? вы используете HTTP получить? Вы используете AJAX? Классы находятся в файлах PHP? Они в другом каталоге? Кажется, у меня возникает следующее ощущение: вы хотите проверить код возврата, который пользователь получает для другого адреса, и на основе этого (который определяется тем, вошел ли он в систему) разрешить или запретить ему. По сути, вам нужен механизм входа для всего сайта.   -  person Menelaos    schedule 12.04.2013
comment
@meewoK Я обновил свой вопрос. Надеюсь, это даст больше понимания. Но, как вы сказали в своем последнем предложении, это то, что я хочу сделать.   -  person doitlikejustin    schedule 12.04.2013
comment
Я обновил свой ответ. Кажется, это ваш сценарий проверки подлинности на самом деле.   -  person Menelaos    schedule 12.04.2013


Ответы (2)


Вы не можете сделать такую ​​​​зависимость. htaccess не является скриптом

person Marcin Orlowski    schedule 12.04.2013
comment
В итоге мне пришлось использовать PHP - person doitlikejustin; 15.08.2013

Обычный способ сделать то, что вы хотите, - это иметь PHP-скрипт аутентификации, который включен во все ваши PHP-файлы и проверяет сеанс. Когда вы включаете один файл PHP в другой, он выполняется.

Таким образом, FILE_A.php будет иметь код аутентификации и будет включен в FILE_1.php, FILE-2.php, FILE_3.php.

Вам не нужен .htaccess, так как вы можете установить заголовок (например, запрещенный) прямо из PHP.

  • например header('HTTP/1.1 403 Запрещено');

видеть:

Просто для удовольствия, хотя вы можете сделать следующее:

  • Выполните аутентификацию в FILE_A.php и установите заголовок в зависимости от результата.
  • Включить FILE_A.PHP из других файлов php.
  • Используйте var_dump(http_response_code()) в других файлах, чтобы обнаружить заголовок, установленный FILE_A.php, и отобразить другой вывод.
person Menelaos    schedule 12.04.2013
comment
Это помогло мне стать на 1 шаг ближе! Все еще работаю над этим, так как некоторые файлы конфликтуют со сценарием, который я использую. - person doitlikejustin; 12.04.2013
comment
Я использую это... mysqlajaxtableeditor.com Все, что я помещаю в класс, вызывает какую-то ошибку. - person doitlikejustin; 13.04.2013