Мне нужно проделать немного странную операцию.
Сначала я запускаю Debian, apache2 (который «работает» как пользовательские www-данные)
Итак, у меня есть простой текстовый файл с расширением .txt или .ini, не имеет значения.
Эти файлы находятся в подпапках со следующей структурой:
www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar .текст
поэтому имя файла всегда одно и то же, то же самое для «иерархии», просто измените имя папки: /folder-name-static/folder-name-dinamyc/file-name-static.txt
Что мне нужно сделать (я думаю) относительно просто: я должен иметь возможность читать этот файл программами на сервере (например, python, php), но если я попытаюсь получить содержимое файла с помощью broswer (цифровая ссылка www. example.com/folder1/car/foobar.txt или через cUrl и т. д.) Я должен получить запрещенную ошибку или что-то еще, но не получить доступ к файлу.
Также было бы хорошо, если бы даже доступ к этим файлам через FTP был `` скрытым '' или в любом случае не мог быть загружен (по крайней мере, что я использую с корнем ftp и пользовательскими данными)
Как я могу сделать?
Я нашел это в сети, поместите в файл .htaccess:
<Files File.txt>
Order allow, deny
Deny from all
</ Files>
Кажется, это работает, но только если файл находится в корневом веб-каталоге (www.example.com / myfile.txt), а не во вложенных папках. Более того, папки второго уровня (www.example.com/folder1/фрукты/foobar.txt) будет создаваться динамически .. Я бы хотел, чтобы вам не приходилось время от времени изменять файл .htaccess.
Можно создать правило, подобное этому, которое распространяется на все файлы с заданным именем, которое находится на * www.example.com / folder-name-static /* имя-папки-dinamyc / *** имя-файла-static.txt *, где эти части всегда одинаковыпросто ** это одно изменение ?
РЕДАКТИРОВАТЬ:
Как сказал Дэйв Драгер, я мог бы упростить это, сохранив этот файл вне каталога, доступного в Интернете. Но эти каталоги также будут содержать другие файлы, изображения и прочее, используемое моими пользователями, поэтому я просто стараюсь не иметь системы повторяющихся папок, например:
/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]
//and, then for the 'secrets' files:
/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt
Вы могли бы использовать Файлы/FilesMatch и регулярное выражение:
<Files ~ "\.txt$">
Order allow,deny
Deny from all
</Files>
Так защищен .htpasswd.
или перенаправить любой доступ к .txt на 404:
RedirectMatch 404 \.txt$
Из порядок раздел документации:
Ключевые слова можно разделять только запятыми; между ними не должно быть пробелов.
Итак, следующее неверно:
<Files File.txt>
Order allow, deny
Deny from all
</ Files>
Следующее (более) правильно
<Files "File.txt">
Order allow,deny
Deny from all
</Files>
Да, это все возможно. Однако, если у вас есть программы на сервере, которым требуется доступ к текстовым файлам, они должны находиться вне корневого веб-каталога. Например, если ваши веб-файлы находятся в ~ / public_html /, вы должны хранить их в ~ / data. Нет причин размещать их в общедоступной папке html.
Помимо удаления их из веб-папки, убедитесь, что для них правильно установлены разрешения unix. Пользователь сценариев должен иметь доступ для чтения (записи?), Но кто-либо еще не должен иметь этот доступ.
Если вам ДЕЙСТВИТЕЛЬНО нужно иметь эти файлы в папке, доступной в Интернете, есть способы сделать то, что вы просите, через mod_rewrite. На следующем сайте вы найдете множество примеров, один из которых должен соответствовать всем требованиям.
http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/
Почему бы не использовать стандартные права доступа к файлу unix, чтобы запретить доступ к файлу?
В Википедии есть достойное объяснение по поводу права доступа к файлу unix
Поместите файл .htaccess в подкаталог и в инструкции установите AllowOverride All
Ты можешь использовать ACL для Linux.
Прочитав вас всех, я заметил, что файл .htaccess может быть для меня способом: влияет только на файлы в папке, где он находится.
Но мои папки генерируются динамически. Я не думаю, что копирование файла .htaccess или его воссоздание каждый раз, когда я создаю новую папку, является надежным способом.
Как сказал Дейв, логическим способом должно быть хранение текстовых файлов конфигурации вне папки, доступной через Интернет.
Но в каждой папке мне нужно хранить другие файлы, например изображения, которые должны быть доступны в Интернете ... и я все еще не думаю, что репликация структуры папок в корневом веб-каталоге и из него также является надежным способом . Следовательно, мне нужно будет изменить даже конфигурацию apache, чтобы включить папку config в разрешенный путь php .. в любом случае это не должно быть проблемой.
Итак, если у меня нет лучше, Я должен выбрать менее хуже один.
Пока я буду использовать решение с несколькими файлами .htaccess, надеясь не пожалеть в будущем.
Любое другое решение приветствуется.