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が実行されていると思います。
これは私が.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>