在Apache 2.2虚拟主机中结合基本身份验证和限制

在Apache 2.2虚拟主机中结合基本身份验证和限制,apache,virtualhost,basic-authentication,http-method,Apache,Virtualhost,Basic Authentication,Http Method,我试图满足以下要求(在ApacheHTTPD2.2中): 如果HTTP方法不是HEAD、POST或GET,则无论以下情况如何,都不允许访问 如果用户是内部用户,则允许在没有基本身份验证挑战的情况下访问 如果用户是外部用户,则使用基本身份验证进行质询,如果他们具有良好的凭据,则允许进入 这是我尝试过的许多事情之一,但我尝试过的所有事情都没有达到所有三个要求: <Directory /path/to/wwwroot> Options FollowSymLinks Al

我试图满足以下要求(在ApacheHTTPD2.2中):

  • 如果HTTP方法不是HEAD、POST或GET,则无论以下情况如何,都不允许访问
  • 如果用户是内部用户,则允许在没有基本身份验证挑战的情况下访问
  • 如果用户是外部用户,则使用基本身份验证进行质询,如果他们具有良好的凭据,则允许进入
这是我尝试过的许多事情之一,但我尝试过的所有事情都没有达到所有三个要求:

<Directory /path/to/wwwroot>
    Options FollowSymLinks
    AllowOverride FileInfo

    # Basic Authentication
    AuthType Basic
    AuthName "Enter your site username and password."
    AuthUserFile /path/to/stage.passwords
    AuthGroupFile /path/to/stage.groups
    Require group stageusers

    # there's more logic for this variable in the real virtual_host.
    # for this simplified example, manually set (using the following)
    # or unset (using !internal_user).
    SetEnv internal_user

    Order deny,allow
    Deny from all
    Allow from env=internal_user

    <LimitExcept HEAD POST GET>
        Deny from all
    </LimitExcept>

    Satisfy all

</Directory>

选项如下符号链接
AllowOverride文件信息
#基本身份验证
AuthType Basic
AuthName“输入您的站点用户名和密码。”
AuthUserFile/path/to/stage.passwords
AuthGroupFile/path/to/stage.groups
需要团队后台人员
#在真正的虚拟主机中,这个变量有更多的逻辑。
#对于此简化示例,请手动设置(使用以下命令)
#或取消设置(使用!内部用户)。
SetEnv内部用户
命令拒绝,允许
全盘否定
允许来自env=内部用户
全盘否定
满足所有
我已经阅读了关于满足、限制、限制、例外、订单和基本身份验证的文档,但是我很难将这些内容组合在一起


什么是可行的方法呢?

在Apache2.2中,您需要返回到“满足任何条件”的方法,然后使用mod_rewrite处理方法检查。这是最好的方法,因为方法检查是完全独立的

在2.4中,Limit/LimitExcept被mod_allowmethods替换/简化,但require也可以直接检查方法。那里要简单得多

重写部分非常简单:

RewriteEngine ON
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$
RewriteRule .* - [F]
但与其他指令不同,您需要确保它出现在可以访问该目录的每个vhost+主服务器中

把它们放在一起
#仅允许预期的HTTP方法。
重写cond%{REQUEST_METHOD}^(领头)$
重写规则。*-[F]
选项如下符号链接
AllowOverride文件信息
满足任何
#基本身份验证
AuthType Basic
AuthName“输入您的站点用户名和密码。”
AuthUserFile/path/to/stage.passwords
AuthGroupFile/path/to/stage.groups
需要团队后台人员
#在真正的虚拟主机中,这个变量有更多的逻辑。
#对于此简化示例,请手动设置(使用以下命令)
#或取消设置(使用!内部用户)。
SetEnv内部用户
命令拒绝,允许
全盘否定
允许来自env=内部用户

直到今天,我才能够回到这项任务。我以前从未使用过悬赏,但现在我不能奖励它,而且它是从我的代表中减去的。我想这个系统背后是有逻辑的(我不明白)。
# Only allow expected HTTP methods.
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$
RewriteRule .* - [F]

<Directory /path/to/wwwroot>
    Options FollowSymLinks
    AllowOverride FileInfo

    Satisfy any

    # Basic Authentication
    AuthType Basic
    AuthName "Enter your site username and password."
    AuthUserFile /path/to/stage.passwords
    AuthGroupFile /path/to/stage.groups
    Require group stageusers

    # there's more logic for this variable in the real virtual_host.
    # for this simplified example, manually set (using the following)
    # or unset (using !internal_user).
    SetEnv internal_user

    Order deny,allow
    Deny from all
    Allow from env=internal_user

</Directory>