web-dev-qa-db-ja.com

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

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 function Apache_get_version()は存在しません。php_sapi_name()は_cgi-fcgi_を返します。SSH端末にアクセスできます。で始まるコマンドはありません。 Apache…またはApache…。しかし、phpinfo()では定数_$_SERVER['SERVER_SOFTWARE']_がApacheに設定され、_$_ENV['SERVER_SOFTWARE']_もApacheに設定されているため、Apacheが実行されていると思います。

1
Tils

これは私が.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>
0
Gerard H. Pille