AuthUserFile 路径相对于虚拟主机根目录吗?

AuthUserFile 路径相对于虚拟主机根目录吗?

鉴于此文件夹/文件结构:

private/.htpasswd
public/.htaccess

...public的根文件夹在哪里虚拟主机在 Apache 中,它private是它的兄弟文件夹:

如何AuthUserFile.htaccess文件中定义相对路径,以便能够访问/private/.htpasswd

我试过了:

AuthType Basic 
AuthUserFile ../private/.htpasswd
require valid-user

但这不起作用,因为它尝试查找相对于 ServerRoot 的文件,而不是相对于虚拟主机根目录的文件。

我无法访问生产服务器(共享主机)上的配置文件,也不想定义绝对路径,因为我的测试和生产文件系统结构不匹配。

在这些条件下,我还能实现我的愿望吗?

答案1

例如,您可以在测试系统上使用符号链接/srv/www/vhost/private/.htpasswd -> /var/www/vhost/private/.htpasswd。第一个路径需要与生产服务器上的路径相同。然后,​​您将能够在两个服务器上使用相同的路径。Options FollowSymLinks可能需要这样做。我看不出有任何方法可以包含与 ServerRoot 不相关的配置文件。

答案2

如果 Selivanov Pavel 发布的符号链接解决方案不起作用,您可以使用 .htaccess 中禁用 Auth* 指令ALlowOverride -AuthConfig(或完全禁用 .htaccess)并将 Auth 配置仅移动到本地计算机上的 Apache conf。

答案3

让我们举个例子。

您的申请位于/var/www/myApp一些Linux 服务器

.htaccess/var/www/myApp/.htaccess

密码应用程序/var/www/myApp/htpasswdApp.(你可以自由地使用任何名称密码文件)

使用相对路径.htaccess

AuthType Digest
AuthName myApp
AuthUserFile "htpasswdApp"
Require valid-user

但它将在服务器根目录目录中。不在文档根目录

在我们的情况下,当应用程序位于/var/www/myApp

文档根目录/var/www/myApp

服务器根目录/etc/apache2//(仅在我们的例子中,因为我们使用Linux 服务器

您可以在 Apache 配置文件中重新定义它(/etc/apache2/apache2.conf),但我认为这不是一个好主意。

因此,在您的/var/www/myApp/.htaccess 你应该在你的服务器根目录

我更喜欢按照以下命令进行操作:

sudo ln -s /var/www/myApp/htpasswdApp /etc/apache2/htpasswdApp

您可以自由地复制我的命令,使用硬链接代替符号,或者将文件复制到您的服务器根目录

答案4

如果没有前导/,则提供的路径AuthUserFile是相对于 的ServerRoot。您的私有目录将具有相对于 ServerRoot 的路径,因此只需提供 - 给定

ServerRoot /var/www

以及一个私人目录

/var/www/some/path/private

然后

AuthUserFile some/path/private

应该管用。

相关内容