Единственное, что вы можете сделать, это сохранить все ваши «секретные» файлы в каталоге за пределами веб-сайта сервера. Затем доступ к этим файлам может быть перенаправлен через один PHP-скрипт внутри вашего каталога. Что-то вроде этого:
http://www.example.com/protected-directory/access.php?file=/foo/document.doc
С структурой каталогов, таких, как это:
+--+ /server_root
|
+--+ /web_root
| |
| +--+ /protected-directory
| +-- access.php
| +-- access-denied.html
|
+--+ /protected_root
|
+--+ /foo
+-- document.doc
В вашей access.php
вы могли бы сделать что-то вроде этого:
$file = $_REQUEST['file'];
if ($user->hasAccessTo($file)) {
readfile("/server_root/protected_root/$file");
} else {
readfile('access-denied.html');
}
Теперь, вы должны будьте осторожны, чтобы убедиться, что никто не прикручивает ваш file
-параметр и пропускает что-то вроде "../../../etc/passwd"
. Кроме того, вы, вероятно, хотите убедиться, что вы отправили правильные заголовки в приведенном выше примере, я пропустил это из соображений ясности.
Дело в том, что если я распространяю это, я не знаю, где пользователь собирается разместить сценарий или какую ОС они находятся. Поэтому я не думаю, что могу использовать .htaccess? – tom
Вы все еще можете использовать .htaccess (и .htpasswd). В настройке Apache по умолчанию (по крайней мере, для Apache2) есть правило блокировать доступ к любому файлу с именем .ht * –