AuthUserFile相对于虚拟主机root的path?

鉴于这个文件夹/文件结构:

private/.htpasswd public/.htaccess 

…其中public是Apache中虚拟主机的根文件夹, private是它的兄弟文件夹:

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

我试过了:

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

但是这不起作用,因为它试图find相对于ServerRoot的文件,而不是相对于虚拟主机的根。

我将无法访问生产服务器上的configuration文件(共享主机),我不想定义绝对path,因为我的testing和生产文件系统结构不匹配。

鉴于这些条件,是否还有可能实现我想要的?

您可以在testing系统上使用符号链接,例如/srv/www/vhost/private/.htpasswd -> /var/www/vhost/private/.htpasswd 。 第一条path需要与生产服务器上的path相同。 那么你将能够在两台服务器上使用相同的path。 Options FollowSymLinks可能需要这个。 我没有看到任何方式来包含configuration文件不相对于ServerRoot。

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

我们来举个例子。

您的应用程序位于某些Linux服务器上的/ var / www / myApp中

.htaccess/var/www/myApp/.htaccess

htpasswdApp/ var / www / myApp / htpasswdApp 。 (您可以自由使用任何名称的.htpasswd文件)

.htaccess中使用相对path:

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

但它会在server_root目录中search文件。 不在document_root中

在这种情况下,当应用程序位于/ var / www / myApp时

document_root/ var / www / myApp

server_root/ etc / apache2 //(就在我们的例子中,因为我们使用的是linux服务器

你可以在你的apacheconfiguration文件( /etc/apache2/apache2.conf )中重新定义它,但我想这是一个坏主意。

因此,要在/var/www/myApp/.htaccess中使用相对文件path,您应该在server_root中定义密码文件。

我更喜欢遵循命令:

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

您可以自由复制我的命令,使用硬链接而不是符号,或将文件复制到您的server_root

没有领先的/那么提供给AuthUserFile的path是相对于ServerRoot 。 你的私人目录将有一个相对于ServerRoot的path,所以只要提供 – 给定

 ServerRoot /var/www 

并在一个provate目录

 /var/www/some/path/private 

然后

 AuthUserFile some/path/private 

应该pipe用。