.htaccess“允许来自env”禁用SSLRequire

时间:2012-08-12 22:27:46

标签: apache .htaccess

使用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不要求身份验证,其他人则要求身份验证。所以一切都很好,但不再需要HTTPS了,密码可以清楚发送!

我在这里做错了什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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