Apache .htaccess“;“允许从环境中获取”;禁用SSLRequire

Apache .htaccess“;“允许从环境中获取”;禁用SSLRequire,apache,.htaccess,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/

使用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不再是必需的,密码可以发送在明确


我在这里做错了什么?

这有点奇怪,因为
满足
指令会影响访问限制,即使
SSLRequireSSL
SSLRequire
影响SSL,它们也被视为访问限制的一部分。因此,当您使用
满足Any
时,允许在不需要有效用户的情况下访问URI,这也使得SSL访问要求成为
Any
的一部分。由于
满足
的选项要么是
全部
要么是
任何
,因此不能说“这一个总是,但其他两个都是”

您可能需要使用mod_rewrite之类的方法来强制htaccess文件中的SSL:

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

多亏了乔恩的回答,我可以尝试不同的解决方案。我找到并应用了我的情况的答案:

在主目录中,.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

嗨,Jon,谢谢你的回答!我尝试了你的解决方案,但不幸的是,它不起作用。然而,我能够进一步探索并找到了一种方法:)我想对你的答案投赞成票,但我还没有足够的声誉。对不起:/