将 AuthUserFile 替换为密码本身或引用文件夹的相对路径

将 AuthUserFile 替换为密码本身或引用文件夹的相对路径

我有一个 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 文件的访问呢?

例如:

  1. 使用 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]
    
  2. PHP 脚本知道所请求的文件(例如$_SERVER['REQUEST_URI'])以及允许访问该文件的用户/密码。

  3. PHP 可以管理 HTTP 基本身份验证(即你似乎正在使用)或者实现您自己的身份验证接口(HTML 表单等)

  4. 如果用户通过了身份验证,那么 PHP 将读取请求的文件并将其提供给客户端。

相关内容