.htaccess IF目录存在

时间:2013-09-17 18:09:26

标签: apache .htaccess

我有一个开发服务器和一个实时服务器。两者都使用相同的.htaccess但我希望开发服务器受密码保护。当我将.htaccess文件复制到live时,我收到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>

真的可以使用一些帮助。

1 个答案:

答案 0 :(得分:2)

您不能在htaccess文件中包含<Directory>个容器,但您可以根据环境变量有条件地打开或关闭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。然后设置auth内容以使用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应设置验证。