Apache .htaccess: SSLRequireSSL вызывает внутреннюю ошибку сервера HTTP 500

У меня есть веб-сервер Apache, размещенный на one.com. Модуль 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 .

1
задан 26 April 2020 в 06:16
1 ответ

Вот как я справился с этим с помощью .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
ответ дан 30 April 2020 в 09:05

Теги

Похожие вопросы