如何避免意外删除基本身份验证?

How can I stop accidentally removing basic authentication?

我有一个 "production" 版本的网站不需要基本身份验证,还有几个 "development" 版本需要。我通过在开发站点的顶级 .htaccess 中包含一个 "AuthType Basic" 指令来实现这一点。顶级 .htaccess 在生产站点上不是空的 - 站点运行需要它 - 它只是必须为开发站点添加这个额外的指令。

每个生产和开发站点 运行 在 git 都有自己的分支机构。问题是:我一直不小心用生产版本替换了一个或多个开发版本中的顶级 .htaccess 文件,从而取消了密码保护。我知道我可以通过合并实践中的纪律来避免这种情况。但是,我大约每个月只在这个项目上工作一次,很容易忘记这一点并意外撤消 .htaccess 自定义。

有没有一种方法可以让我在生产站点和开发站点上拥有相同的 .htaccess,同时仍然安排开发站点而不是生产站点需要基本身份验证?

这里有一些想法,我不知道哪些可以通过 .htaccess 完成 -

我只能修改.htaccess;不是服务器范围的 apache 配置。

如果您无权访问 server/vhost 配置,那么您确实可以通过检查主机名来使用条件逻辑。您可以结合使用 SetEnvIfNoCase 来检查主机名,并使用 Satisfy Any 来绕过 Require 指令。它看起来像:

SetEnvIfNoCase Host production.example.com norequire_auth=yes

# Auth stuff
AuthUserFile /var/www/htpasswd
AuthName "Password Protected"
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=norequire_auth

当然,您的 auth 内容看起来像您需要的任何东西,但是如果请求的主机是 "production.example.com",那么 "norequire_auth" 环境变量将被设置并且行:

Allow from env=norequire_auth

绕过认证