【问题标题】:how to parameterize the path to the .htpasswd in the .htaccess file?如何参数化 .htaccess 文件中 .htpasswd 的路径?
【发布时间】:2016-10-17 14:06:49
【问题描述】:

我的 .htaccess 文件中有以下代码

AuthUserFile ./.htpasswd
AuthGroupFile /dev/null
AuthName "Dev Area One"
AuthType Basic

<Limit GET>
require valid-user
</Limit>

这会导致 500 内部服务器错误,因为 Apache 说它找不到文件 /etc/apache2/.htpasswd。那是因为 .htpasswd 位于目录 /var/www/html/dev1.staging.com/public_html/.htpasswd 中,而我的 .htaccess 位于 /var/www/html/dev1.staging.com/public_html/.htaccess 中。

我可以用AuthUserFile SOMEVARIABLE+.htpasswd 替换AuthUserFile ./.htpasswd,这样每次其他团队成员对他们的开发服务器执行git pull origin master 时,.htaccess 将正确引用应该与 .htaccess 位于同一目录中的 .htpasswd ?

这纯粹是为了开发目的。有一些服务器(其中一些是共享主机)我们没有文件写入权限,所以我们不能立即知道我们的 Web 项目是从哪个目录提供服务的,所以我们不能提前知道绝对.htpasswd 的目录路径。

【问题讨论】:

  • 使用 .htpasswd 文件的绝对路径。为什么你不能这样做?
  • @PanamaJack 如何确定绝对路径?我在客户端服务器上没有 SFTP 或 shell。并且客户端拒绝手动修改其暂存服务器上的任何文件。
  • 老兄,你已经拥有它了。 AuthUserFile /var/www/html/dev1.staging.com/public_html/.htpasswd 试试吧。我使用完整路径,它总是对我有用。
  • @PanamaJack 那只是我的服务器。这不会是我们客户端服务器上的路径。而且我们的客户在将他们的目录结构暴露在服务器上时并不合作。他们说“只需将您的更改从 git dev 分支合并到 master 分支,我们的代码将自动部署到我们的服务器。不要再向我们询问有关我们服务器的任何问题,因为您不应该知道它。”。
  • 我明白了。我不明白这是另一台服务器。那么也许他们那时就不需要帮助了。 :) 然后让他们在 .htaccess 文件中更改他们的路径。

标签: .htaccess .htpasswd


【解决方案1】:

您可以在AuthUserFile 的路径中使用shell 环境变量,方法是使用PassEnv directive

PassEnv HOME

AuthUserFile ${HOME}/.htpasswd
AuthGroupFile /dev/null
AuthName "Dev Area One"
AuthType Basic

<Limit GET>
require valid-user
</Limit>

仅当每个用户将.htpasswd 直接存储在$HOME 目录下时,上述sn-p 才会起作用。

【讨论】:

  • 感谢这对未来有用。不幸的是,就我目前的情况而言,.htpasswd 并不总是在$HOME 目录中。它会因服务器而异
  • 然后尝试使用您可以从一台服务器控制到另一台服务器的其他变量。这是在AuthUserFile 中使用某些变量的唯一可能方法,否则使用硬编码路径。
猜你喜欢
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多