2015-12-19 6 views
0

У меня есть папка с именем cache. Он имеет подпапки и файлы. Мне нужно сделать контент cache доступным, только если isset($_SESSION["logged"]).Ограничить доступ к контенту только зарегистрированным пользователям

Я направляю все запросы к папке кэша через index.php, поместив следующий .htaccess файл в папке кэша:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule^index.php [L] 
</IfModule> 

В index.php следующей проверки написано:

<?php session_start(); 
if (!isset($_SESSION["logged"])) { 
    die(); 
} else { 
    header('Location: ' . $_SERVER['REQUEST_URI']); 
    die; 
} 

Но я погрешность:

This web page has a redirect loop 

ERR_TOO_MANY_REDIRECTS 

Не могли бы вы p сдавайте в аренду, где я ошибаюсь.

ответ

2

Причина, по которой вы получаете эту ошибку, состоит в том, что вы явно реализовали бесконечный цикл. Ваш вызов header() перенаправляет обратно на тот же URL-адрес, который был первоначально запрошен, поэтому правило перезаписи снова применяется, все начинается снова и снова.

Вместо этого вы должны вывести содержимое запрашиваемого файла кэша:

<?php 
session_start(); 
$pathToCachedLocation = '/some/path' . $_SERVER['REQUEST_URI']; 
if (isset($_SESSION["logged"]) && file_exists($pathToCacheLocation)) { 
    readfile($pathToCacheLocation); 
} 

Вы все еще должны добавить некоторые дополнительные проверки и обработки ошибок, чтобы убедиться, что запрос предназначается файл на самом деле внутри местоположения физического кэша (см. realpath()) и доступно разрешение на чтение (см. is_readable()). Также некоторые заголовки http, вероятно, имеют смысл отправки. Приведенный выше пример упрощен, чтобы продемонстрировать подход.

+0

Спасибо за ваш ответ, но 'file_get_contents ($ pathToCacheLocation);' не работает в этом случае –

+0

@KunwarbirS. О, простите об этом. Действительно, 'file_get_contents()' здесь не имеет смысла (хотя было бы легко исправить это). Я изменил код примера, чтобы использовать 'readfile()', что явно имеет смысл здесь. – arkascha

Смежные вопросы