Apache .htaccess:SSLRequireSSLはHTTP500内部サーバーエラーを生成します

Apr 26 2020

one.comでホストされているApacheWebサーバーがあります。OpenSSLモジュールはアクティブで機能しています。.htaccessを操作すると、反応がわかります。SSLに頼りたいのですが、書き換えによるリダイレクトで問題ありません。また、ユーザー認証が必要です。で正常に動作しAuthType Basicます。欠点は1つだけです。ユーザーがリクエストしたときhttp://sub.example.com/non-existent-file(SSLなし、もちろん私の実際のドメイン名で)、SSLなしのログインプロンプトが表示されます。もちろん、暗号化されていないパスワードを送信することは禁止したいと思います。私が読んだ、最も簡単な解決策はSSLRequireSSLディレクティブを使用することですが、私のApacheはそれを好まないようです。エラーを再現するために、例を分解してみましょう。完全な黒の.htaccessファイルは、サーバーがHTTPとHTTPSの両方のコンテンツを提供することができます。SSLRequireSSL.htaccessに何も追加しないと、HTTP500内部サーバーエラーが発生します。

.htaccess

SSLRequireSSL

→500内部サーバーエラー

それはなぜSSLRequireSSLですか、代わりにどのように使用する必要がありますか?

SSLRequireSSL:なしの私の完全な.htaccessファイル

<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()ていると思います。これは、Apacheで定数がに$_SERVER['SERVER_SOFTWARE']設定されApache$_ENV['SERVER_SOFTWARE']またに設定されていることを示しているためApacheです。

回答

GerardH.Pille Apr 30 2020 at 16:05

これは私が.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>