您的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文件
請提供代碼示例 – nakashu
增加了一個例子的要求 –
感謝您的答覆,艾倫!但是,我真的更喜歡通過htaccess的解決方案,因爲我不知道我什至可以控制我的虛擬主機....有沒有辦法通過htaccess來做到這一點? – Colin