У меня есть сервер Apache 2.2 с сертификатом SSL, на котором размещены несколько сервисов, доступ к которым должен быть только через SSL.
то есть: https : //myserver.com/topsecret/ должен быть разрешен, а http : //myserver.com/topsecret/ должен быть либо запрещен, либо, в идеале, перенаправлен на https.
http://myserver.com/public не должно иметь этого ограничения и должно работать с использованием http или https.
Решение о разрешении / запрете http принимается в каталоге верхнего уровня и влияет на весь контент, находящийся под ним.
Существует ли директива, которая может быть помещена в конфигурацию Apache для ограничения доступа таким образом?
источник
В глобальной конфигурации вы можете использовать:
Точно так же вы можете использовать файл .htaccess в первом каталоге дерева защищенных каталогов:
Последний также может быть помещен в директиву каталога в конфигурации глобального или виртуального хоста.
источник
В качестве альтернативы вы могли бы использовать серверный язык для выполнения обработки за вас, а не использовать параметры конфигурации Apache (если, возможно, у вас нет доступа к конфигурации сервера).
Например, с PHP:
(хотя имейте в виду - если вы используете ISAPI в Microsoft IIS, если запрос не маршрутизируется через HTTPS, тогда значение переменной $ _SERVER ['HTTPS'] будет «выключено»)
источник
Кто-то упомянул SSLRequireSSL, но я не думаю, что он работает сам по себе, и я не нашел успешный пример с ним. Рекомендованный способ - https://wiki.apache.org/httpd/RedirectSSL. Я применил это, и оно работает хорошо!
источник
Предполагая, что вы используете директивы VirtualHost,
Поместите директиву Directory в виртуальный хост не-ssl, запрещающий доступ.
Затем поместите директиву Directory в виртуальный хост ssl, предоставляющий доступ.
источник
Я всегда делал это mod_rewrite в файле .htaccess, хотя вы должны быть в состоянии сделать это и в основном конфигурационном файле.
Вот руководство с несколькими способами сделать это: перенаправления Smart HTTP и HTTPS RewriteRule
источник