鉴于这个文件夹/文件结构:
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用。