Ssl
Apache .htaccess:SSLRequireSSL 產生 HTTP 500 內部伺服器錯誤
我有一個託管在 one.com 上的 Apache Web 伺服器。OpenSSL 模組處於活動狀態並且正在工作。我可以操縱 .htaccess 並看到反應。我想依賴 SSL,並且通過重寫進行重定向工作正常。另外,我需要使用者身份驗證。它適用於
AuthType Basic
. 只有一個缺點:當使用者請求http://sub.example.com/non-existent-file(沒有 SSL,當然是我的真實域名)時,他們會看到沒有 SSL 的登錄提示。當然,我想禁止發送未加密的密碼。我讀過,最簡單的解決方案是使用該SSLRequireSSL
指令,但我的 Apache 似乎不喜歡它。讓我分解範例以重現錯誤。一個完全黑色的 .htaccess文件允許伺服器在 http 和 https 上提供內容。如果我只添加SSLRequireSSL
.htaccess 中沒有其他內容,我收到 HTTP 500 內部伺服器錯誤。.htaccess
SSLRequireSSL
→ 500 內部伺服器錯誤
為什麼會這樣,我應該如何使用
SSLRequireSSL
?我的完整 .htaccess 文件沒有
SSLRequireSSL
:<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=307] Redirect 307 /index.php /pages/welcome.php </IfModule> <IfModule mod_authn_file.c> AuthName "Get username and password from admin." AuthType Basic <if "%{REMOTE_ADDR} -ipmatch '192.168.0.0/24'"> AuthUserFile /home/user/www/sub.example.com/html/.htpasswd </if> <else> AuthUserFile /customers/1/a/0/example.com/httpd.www/sub/.htpasswd </else> Require valid-user Order deny,allow Deny from all Allow from 192.168.0.0/24 w3.org googlebot.com Satisfy Any </IfModule>
我無法確定我的 Apache 版本。PHP 函式
apache_get_version()
不存在。php_sapi_name()
返回cgi-fcgi
。我可以訪問 SSH 終端。沒有以 apache… 或 Apache… 開頭的命令。但我想 Apache 正在執行,因為phpinfo()
它告訴我們一個常量$_SERVER['SERVER_SOFTWARE']
設置為Apache
並且$_ENV['SERVER_SOFTWARE']
也設置為Apache
.
這就是我使用 .htaccess 管理它的方式:
RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] <If "%{HTTPS} == 'on'"> AuthType Basic AuthName "Restricted Files" AuthBasicProvider file AuthUserFile "/var/www/html/secrets/.passwd" Require valid-user </If>