2016-02-11 54 views
1

由於許多互聯網用戶已成功完成強制HTTPS登錄到我的網站,但之前出現基本身份驗證對話窗口,我正在嘗試。我嘗試了兩種主要的方法,包括「FilesMatch」解決方案和「ErrorDocument」解決方案。前者導致內部服務器錯誤,後者導致重定向循環問題。以下是我迄今爲止(試圖讓錯誤文檔解決方案的工作):在基本身份驗證之前強制HTTPS重定向循環

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

SSLRequireSSL 
ErrorDocument 403 https://website.com/private/https.php 

AuthType Basic 
AuthName "Password Protected Area" 
AuthUserFile /srv/users/serverpilot/apps/intranet/public/.htpasswd 
Require valid-user 

的https.php文件很簡單:

<?php 
header("LOCATION: /"); 
exit(); 

我的服務器運行的Apache 2.2和重定向在您通過驗證後運作。我究竟做錯了什麼?

回答

3

您的http重定向應在您的端口80虛擬主機上設置,而您的驗證配置只應添加到您的端口443虛擬主機。

例如:

<VirtualHost *:80> 
    ServerName www.server.com 
    DocumentRoot /var/www/site 

    <Directory /var/www/site> 
     RewriteEngine On 
     RewriteCond %{HTTPS} !=on 
     RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
    </Directory> 
</VirtualHost> 

<VirtualHost *:443> 
    ServerName www.server.com 
    DocumentRoot /var/www/site 

    <Directory /var/www/site> 
     Options FollowSymLinks MultiViews 
     AllowOverride none 
     Require all granted 
    </Directory> 

    <Location /> 
     AuthType Basic 
     AuthName "Password Protected Area" 
     AuthUserFile /srv/users/serverpilot/apps/intranet/public/.htpasswd 
     Require valid-user 
    </Location> 
</VirtualHost> 

其實已經想過這個問題,因爲我們知道,所有的端口80(非HTTPS)的訪問將被重定向,我們可以簡單地做更多的直接是這樣的:

<VirtualHost *:80> 
    ServerName www.server.com 
    RedirectPermanent/https://www.server.com 
</VirtualHost> 

然後就像上面那樣使用端口443虛擬主機。

若要只使用的.htaccess設置這個工程實現類似的東西:

SSLOptions +StrictRequire 
SSLRequireSSL 
SSLRequire %{HTTP_HOST} eq "www.server.com" 

AuthType Basic 
AuthName "Password Protected Area" 
AuthUserFile /var/www/site/.htpasswd 
Require valid-user 

ErrorDocument 403 https://www.server.com/ 
ErrorDocument 404 https://www.server.com/ 

的主要缺點,這是你永遠被重定向到主頁(或任何你的ErrorDocument指令指向)。 Apache網站提到(見here),你可以使用腳本作爲你的ErrorDocument,並且它傳遞了原始的請求URI,儘管當我在Apache 2.4上嘗試這個時,它似乎沒有這樣工作。

此外,主VirtualHost配置中的任何設置可能會混淆這種方法。不幸的是,與主服務器配置相比,htaccess相當受限制。

我可以建議的另一件事是,如果你不需要整個站點的安全,你可以在另一個.htaccess文件的子目錄中設置授權指令。

退房this site關於使用.htaccess文件

+0

請提供代碼示例 – nakashu

+0

增加了一個例子的要求 –

+0

感謝您的答覆,艾倫!但是,我真的更喜歡通過htaccess的解決方案,因爲我不知道我什至可以控制我的虛擬主機....有沒有辦法通過htaccess來做到這一點? – Colin

0

一些非常好的信息,我不知道你有沒有因爲排序問題,或者這是否有幫助,但下面是我用的開發機器上,以確保https正在我正在使用的整個站點中使用。

這兩條線位於網站根級別的.htaccess - 主要的httpd.conf中的配置相當複雜,但只是爲管理區域內的ssl設置了特定的選項,並且不會影響非管理區域所以我知道這個作品(是否適合你,我不能說)

管理區域目前使用basic authentication後,我廢除digest auth〜雖然它一切正常,這也。

我沒有像上面那樣使用錯誤文檔來重定向,因爲下面的代碼確保https - 希望它有幫助!

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R,L]