【问题标题】:How can I stop accidentally removing basic authentication?如何停止意外删除基本身份验证?
【发布时间】:2015-02-19 23:09:39
【问题描述】:

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

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

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

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

  • 基于服务器名称的条件逻辑
  • 包含另一个(非版本化).htaccess 文件
  • 环境变量的测试值

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

【问题讨论】:

  • 您是否有权访问 apache 服务器/vhost 配置?

标签: apache .htaccess version-control


【解决方案1】:

如果您无权访问服务器/虚拟主机配置,那么您确实可以通过检查主机名来使用条件逻辑。您可以结合使用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

当然,您的身份验证内容看起来就像您需要的任何内容,但如果请求的主机是“production.example.com”,则设置“norequire_auth”环境变量并执行以下操作:

Allow from env=norequire_auth

绕过身份验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2021-07-20
    • 2012-02-08
    相关资源
    最近更新 更多