鉴于此文件夹/文件结构:
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
应该管用。