【问题标题】:.htaccess "Allow from env" disables SSLRequire.htaccess "Allow from env" 禁用 SSLRequire
【发布时间】:2012-08-09 05:06:43
【问题描述】:

使用 Apache,我在文件夹上强制使用 HTTPS:

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.example.com"
ErrorDocument 403 https://www.example.com/admin/

我使用 Apache AuthBasic 保护文件夹:

AuthType Basic
AuthName "Administration"
AuthUserFile /path/to/my/.htpasswd
Require valid-user
Satisfy all

像这样,密码总是通过 HTTPS 发送。它运行良好,但后来我尝试禁用单个 URL 的身份验证:

SetEnvIf Request_URI "crm/index\.php$" removeme_uri
Order deny,allow
Deny from all
Allow from env=removeme_uri
Satisfy any

此 URL 不要求进行身份验证,而其他 URL 则要求。所以一切都很好,但是不再需要HTTPS,并且可以明文发送密码!

我在这里做错了什么?

【问题讨论】:

    标签: apache .htaccess


    【解决方案1】:

    感谢 Jon 的回答,我可以尝试不同的解决方案。我找到了this question 并将答案应用于我的情况:

    在主目录中,.htaccess 包含

    SSLOptions +StrictRequire
    SSLRequireSSL
    SSLRequire %{HTTP_HOST} eq "www.example.com"
    ErrorDocument 403 https://www.example.com/admin/
    
    AuthType Basic
    AuthName "Administration"
    AuthUserFile /path/to/my/.htpasswd
    Require valid-user
    Satisfy all
    

    crm 子目录中,.htaccess 有:

    <FilesMatch "index\.php">
        Allow from all
        Satisfy any
    </FilesMatch>
    

    它在任何情况下都强制使用 SSL,并允许访问crm/index.php

    【讨论】:

      【解决方案2】:

      这有点奇怪,因为Satisfy 指令会影响访问限制,尽管SSLRequireSSLSSLRequire 会影响 SSL,但它们被视为访问限制的一部分。因此,当您使用 Satisfy Any 时允许访问 URI 而不需要有效用户时,它也会这样做,因此 SSL 访问要求是 Any 的一部分。而且由于Satisfy 的选项是AllAny,因此您不能说“总是这个,但其他两个任意”。

      您可能必须使用 mod_rewrite 之类的东西来强制在您的 htaccess 文件中使用 SSL:

      RewriteEngine On
      RewriteCond %{HTTPS} !on
      RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
      

      【讨论】:

      • 您好乔恩,感谢您的回答!我尝试了您的解决方案,但不幸的是它不起作用。但是,我能够进一步探索并找到一种方法:) 我想支持你的答案,但我还没有足够的声誉。对不起:/
      猜你喜欢
      • 2011-05-15
      • 2019-12-18
      • 2017-03-15
      • 2012-01-23
      • 2012-04-29
      • 2017-11-30
      • 2010-10-27
      • 2016-12-09
      • 2012-05-26
      相关资源
      最近更新 更多