使用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了,密码可以清楚发送!
我在这里做错了什么?
答案 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
指令影响访问限制,尽管SSLRequireSSL
和SSLRequire
影响SSL,但它们被视为访问限制的一部分。因此,当您在允许访问URI的情况下使用Satisfy Any
而不需要有效用户时,它也使得SSL访问要求成为Any
的一部分。由于Satisfy
的选项为All
或Any
,因此您不能说“总是这一个,而是其他2个”。
您可能必须使用类似mod_rewrite的东西来强制执行htaccess文件中的SSL:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]