Ssl

Apache .htaccess:SSLRequireSSL 產生 HTTP 500 內部伺服器錯誤

  • April 30, 2020

我有一個託管在 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>

引用自:https://serverfault.com/questions/1014190