2012-08-12 60 views
0

使用Apache,我強迫HTTPS的文件夾上:的.htaccess 「從ENV允許」 禁用SSLRequire

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 

此網址不要求進行身份驗證,和其他人做。所以一切都很好,但不再需要HTTPS,密碼可以發送清晰!

我在這裏做錯了什麼?

回答

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

0

這有點奇怪,因爲Satisfy指令影響訪問限制,並且儘管SSLRequireSSLSSLRequire影響SSL,但它們被認爲是訪問限制的一部分。所以當你在允許訪問一個URI而不需要有效用戶的情況下使用Satisfy Any時,它也使得它的訪問需求是Any的一部分。由於Satisfy的選項是AllAny,所以不能說「總是這個,而是其他2個」。

您可能需要使用類似的mod_rewrite強制SSL在你的htaccess文件:

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

嗨,喬恩,謝謝你的回答!我試過你的解決方案,但不幸的是它沒有工作。不過,我能夠進一步探索並找到一種方法:) 我想upvote你的答案,但我沒有足夠的聲望呢。對不起:/ – 2012-08-15 21:08:28