0

我有一个开发服务器和一个实时服务器。两者都使用相同的 .htaccess,但我希望开发服务器受到密码保护。当我将 .htaccess 文件复制到现场时,我收到 500 错误。.htaccess 是否提供了某种方法来仅使用 IF 等条件对目录进行密码保护?

我正在使用什么:

<Directory "/home/my/path/to/development/site/">
  AuthName "Restricted Area 52" 
  AuthType Basic 
  AuthUserFile /home/my/path/to/development/site/.htpasswd 
  AuthGroupFile /dev/null 
  require valid-user
</Directory>

真的可以使用一些帮助。

4

1 回答 1

3

您不能<Directory>在 htaccess 文件中包含容器,但您可以根据环境变量有条件地打开或关闭 HTTP 身份验证。

例如,假设您的生产站点是http://production.example.com,您的开发站点是,http://dev.example.com那么您可以检查 HTTP 主机并设置一个环境变量:

SetEnvIfNoCase Host ^dev\.example\.com$ require_auth=true

或者,如果路径不同,假设您的生产站点是http://example.com/,开发站点是http://example.com/dev/,那么您可以检查请求的 URI:

SetEnvIfNoCase Request_URI ^/dev/ require_auth=true

您可以进行其他几项检查,这些检查在mod_setenvif中进行了概述。无论哪种方式,您都希望设置require_auth=true它何时是对开发者的请求。然后您设置要使用的身份验证内容Satisfy Any

# Auth stuff
AuthUserFile /home/my/path/to/development/site/.htpasswd 
AuthName "Restricted Area 52"
AuthType Basic

# Setup a deny/allow
Order Deny,Allow
# Deny from everyone
Deny from all
# except if either of these are satisfied
Satisfy any
# 1. a valid authenticated user
Require valid-user
# or 2. the "require_auth" var is NOT set
Allow from env=!require_auth

因此,如果require_auth未设置,则不需要身份验证,SetenvIf如果是开发请求,您应该设置它。

于 2013-09-17T18:50:27.747 回答