我有一个 PHP 脚本,它生成了数百个目录,这些目录中包含 CSV 文件。如果 AuthUserFile 指向绝对 .htpasswd 文件,我可以使用 AuthUserFile 保护这些 CSV 文件,但我想在每个目录中指向自定义生成的 .htpasswd。
- 有没有办法替代:验证用户文件密码本身?我的 PHP 脚本中已经预先生成了密码。
- 或者我如何在其所在的同一目录中引用 .htpasswd 文件。执行以下操作不起作用:AuthUserFile'./htpasswd'
答案1
- 有没有办法替代:验证用户文件密码本身?我的 PHP 脚本中已经预先生成了密码。
- 或者我如何在其所在的同一目录中引用 .htpasswd 文件。执行以下操作不起作用:AuthUserFile'./htpasswd'
不幸的是,你无法做到这两点。AuthUserFile
(即 HTTP 身份验证)需要绝对文件路径(或相对路径ServerRoot
)并且阿帕奇表达式据我所知,语法不支持使其“动态”(与 Apache 2.4 中的一些其他指令一样,例如ErrorDocument
)。
但是,由于您正在生成目录,因此您可能可以为每个目录生成.htaccess
(?)文件和相应的.htpasswd
文件?但是,.htpasswd
文件应该绝不存储在它们所保护的目录中,甚至存储在公共 HTML 空间中。它们应该存储在公共目录树之外,位于文档根目录之上。(并且可能您最初想要避免多个.htaccess
文件,尽管您的建议我不确定?)
或者,既然您已经使用 PHP 生成这些目录并且您的 PHP 脚本已经知道相关密码,那么为什么不使用 PHP 来管理对 CSV 文件的访问呢?
例如:
使用 Apache mod_rewrite 在内部将任何“受保护”文件的请求重写
.csv
为 PHP 脚本。例如:RewriteEngine On # All requests for ".csv" files in the "/foo/" dir tree are routed to "/serve-csv.php" RewriteRule ^/?foo/.+\.csv$ /serve-csv.php [L]
PHP 脚本知道所请求的文件(例如
$_SERVER['REQUEST_URI']
)以及允许访问该文件的用户/密码。PHP 可以管理 HTTP 基本身份验证(即你似乎正在使用)或者实现您自己的身份验证接口(HTML 表单等)
如果用户通过了身份验证,那么 PHP 将读取请求的文件并将其提供给客户端。