У меня есть PHP-скрипт, который создает 100 каталогов, и в этих каталогах содержатся CSV-файлы. Я могу защитить эти CSV файлы с помощью AuthUserFile, если он указывает на абсолютный .htpasswd файл, но я хочу указать на пользовательский сгенерированный .htpasswd в каждой из этих директорий.
- Есть ли способ заменить: AuthUserFile самим паролем? Я уже создал это в моем PHP-скрипте.
- ИЛИ как я могу сослаться на файл .htpasswd в том же каталоге, в котором он находится. Выполнение следующих действий не работает: AuthUserFile './htpasswd'
К сожалению, вы не можете сделать ни одно из этих действий. AuthUserFile
(например, HTTP-аутентификация) требует абсолютного пути к файлу (или относительного пути к ServerRoot
) и синтаксис выражения Apache не поддерживается, чтобы сделать этот «динамический» AFAIK (как и некоторые другие директивы в Apache 2.4, например, ErrorDocument
).
Однако, поскольку вы создаете каталоги, вы могли бы предположительно создать файл .htaccess
(?) И соответствующие файлы .htpasswd
для каждого каталога? Однако файлы .htpasswd
не должны никогда храниться в каталоге, который они защищают, или даже в общедоступном пространстве HTML. Они должны храниться вне дерева общих каталогов, над корнем документа. (И, вероятно, вы изначально хотели избежать нескольких файлов .htaccess
, хотя с вашими предложениями я не уверен в этом?)
В качестве альтернативы, поскольку вы уже используете PHP для генерируя эти каталоги, и ваш PHP-скрипт уже знает соответствующие пароли, тогда почему бы не использовать PHP для управления доступом к файлам CSV?
Например:
Используйте Apache mod_rewrite для внутренней перезаписи запроса для любого «защищенного» .csv
файл в сценарий PHP.Например:
RewriteEngine On
# Все запросы для файлов ".csv" в дереве каталогов "/ foo /" направляются в "/serve-csv.php"{{1 }} RewriteRule ^ /? Foo /.+ \. Csv $ /serve-csv.php [L]
Сценарий PHP знает запрошенный файл (например, $ _ SERVER ['REQUEST_URI ']
) и пользователей / пароли, которым разрешен доступ к этому файлу.
PHP может управлять базовой аутентификацией HTTP (это , похоже, вы используете ) или реализовать свой собственный интерфейс аутентификации (HTML-формы и т. Д.).
Если пользователь аутентифицирован, PHP читает запрошенный файл и обслуживает этого клиента.