将Apache配置为在DocumentRoot而不是ServerRoot中查找配置文件(.htpasswd)

pftdvrlh  于 2023-10-23  发布在  Apache
关注(0)|答案(1)|浏览(125)

我正在寻找一种方法来强制Apache查找相对于DocumentRoot而不是ServerRoot的文件。现在,如果我创建.htaccess如下:

#Protect Directory
AuthName "Please provide valid username and password"
AuthType Basic
AuthUserFile .htpasswd
Require valid-user

Apache在以下位置查找.htpasswd:

/opt/homebrew/opt/httpd/.htpasswd

我想在以下几个方面寻找它:

/opt/homebrew/var/www/FOLDER/.htpasswd

.htaccess被放置在:

/opt/homebrew/var/www/FOLDER/.htaccess

我不想更改ServerRoot并移动所有配置。

jfewjypa

jfewjypa1#

你不能改变这种行为。根据AuthUserFile指令的Apache文档,AuthUserFile指令的 file-path 必须是:

  • 绝对文件系统路径。举例来说:
AuthUserFile /opt/homebrew/var/www/FOLDER/.htpasswd

OR,

  • ServerRoot的文件路径 relative

但是,分配相对于文档根的路径也会违反安全建议,该建议特别指出:
确保AuthUserFile存储在Web服务器的文档树之外。不要将其放在它所保护的目录中。否则,客户端可能能够下载AuthUserFile。
在您的示例(AuthUserFile .htpasswd)中,看起来您希望它相对于包含.htaccess文件的目录,而不仅仅是文档根目录?
如果你需要在不同的服务器上提供不同的服务,那么你可以使用<If>表达式(或其他条件)来根据请求或服务器的元素有条件地设置AuthUserFile
也可以使用 defined 变量。举例来说:

# In the server config
Define DOCUMENT_ROOT /opt/homebrew/var/www

.htaccess中:

:
AuthUserFile ${DOCUMENT_ROOT}/FOLDER/.htpasswd

相关问题