如何在htaccess中使用与AuthUserFile的RELATIVE路径?

Dss*_*ner 89 .htaccess .htpasswd

我有一个使用基本身份验证的.htaccess.似乎.htpasswd文件的路径与htaccess文件无关,而是与服务器配置相关.

因此即使我在同一目录中有.htaccess和.htpasswd文件,这也不起作用:

AuthType Basic
AuthName "Private Login"
AuthUserFile .htpasswd
Require valid-user
Run Code Online (Sandbox Code Playgroud)

但是,如果我将AuthUserFile更改为使用绝对路径,它确实有效:

AuthType Basic
AuthName "Private Login"
AuthUserFile "/home/user/public_html/mydir/.htpasswd"
Require valid-user
Run Code Online (Sandbox Code Playgroud)

但我更喜欢更具移动性的东西,因为我在不同领域的多个网站上使用它.我在网上搜索过但没有任何解决方案.是否可以使用相对路径或变量%{DOCUMENT_ROOT}

cwe*_*ske 44

无法使用AuthUserFile的相对路径:

文件路径是用户文件的路径.如果它不是绝对的(即,如果它不是以斜线开头),则将其视为相对于ServerRoot.

你必须接受并解决这个限制.


我们IfDefine一起使用apache2 命令行参数:

.htaccess (适用于开发和实时系统):

<IfDefine !development>
  AuthType Basic
  AuthName "Say the secret word"
  AuthUserFile /var/www/hostname/.htpasswd
  Require valid-user
</IfDefine>
Run Code Online (Sandbox Code Playgroud)

开发服务器配置(Debian)

附加以下内容/etc/apache2/envvars:

export APACHE_ARGUMENTS=-Ddevelopment
Run Code Online (Sandbox Code Playgroud)

之后重新启动您的apache,只有当您不在开发服务器上时才会收到密码提示.

您当然可以为开发服务器添加另一个IfDefine,只需复制块并删除即可!.

  • 但是这仍然使用绝对路径(`/ var/...`) - 问题是:"如何使用相对路径"? (3认同)

Han*_*etz 12

1)请注意,将.htpasswd文件放在服务器根目录下面被认为是不安全的.

2)文档说这是关于相对路径的,所以看起来你运气不好:

文件路径是用户文件的路径.如果它不是绝对的(即,如果它不是以斜杠开头),则将其视为相对于ServerRoot.

3)虽然推荐使用环境变量的答案完全正常工作,我宁愿把一个占位符的.htaccess文件,或者在我的代码库有不同的版本,并有部署过程中设置了全面的总结(如更换占位符或重命名/移动相应的文件).

在Java项目中,我使用Maven来完成这类工作,例如PHP项目,我喜欢使用build.sh和/或install.sh shell脚本来将已部署的文件调整到他们的环境中.这将您的代码库与其目标环境的细节(即其环境变量和配置参数)分离.一般来说,应用程序应该适应环境,如果您反过来这样做,一旦环境也必须满足不同的应用程序,或者完全不相关的系统特定要求,您可能会遇到问题.


mas*_*sk8 12

为了以防人们正在为此寻找解决方案:

<If "req('Host') = 'www.example.com'">
    Authtype Basic
    AuthName "user and password"
    AuthUserFile /var/www/www.example.com/.htpasswd
    Require valid-user
</If>
Run Code Online (Sandbox Code Playgroud)

  • 这太好了,但是依赖 `req('Host')` 是否安全,客户端不能欺骗这个值吗? (2认同)

dig*_*key 8

您可以将您的Auth设置放入环境中.喜欢:

SetEnvIf HTTP_HOST testsite.local APPLICATION_ENV=development
<IfDefine !APPLICATION_ENV>
  Allow from all
  AuthType Basic
  AuthName "My Testseite - Login" 
  AuthUserFile /Users/tho/htdocs/wgh_staging/.htpasswd
  Require user username
</IfDefine>
Run Code Online (Sandbox Code Playgroud)

Auth正在运行,但我无法让我的环境真正运行.

  • 为什么这不起作用在这里解释得特别好http://stackoverflow.com/questions/11073752/apache-if​​define-conditionals-in-htaccess (4认同)

mun*_*uni 5

.htpasswd需要从服务器绝对根开始的完整绝对路径。

请通过echo获取文件的完整绝对路径echo $_SERVER['DOCUMENT_ROOT'];

这里是基本的auth .htaccess脚本。

AuthType Basic
AuthName "Access to the Hidden Files"
AuthUserFile 'C:/xampp/htdocs/ht/.htpasswd'
Require valid-user
Run Code Online (Sandbox Code Playgroud)

登录前

在此处输入图片说明

Afetr登录

在此处输入图片说明