Задача: перенаправить http запросы на защищенное https соединение например, запрос http://site.domain.ru будет перенаправлен на https://site.domain.ru
Конфигурация: Debian 7, apache 2.2.22
Примечание: в данной статье не рассматривается генерация ключей и сертификатов. Читайте в следующей
Начнём
1. Если не включено, включаем поддержку необходимых модов в apache:
# ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled/vhost_alias.load # ln -s /etc/apache2/mods-available/vhost_alias.conf /etc/apache2/mods-enabled/vhost_alias.conf # ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load # ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf # ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
host_alias – позволяет на одном IP адресе поддерживать несколько виртуальных хостов;
ssl – поддержка шифрования SSL (в данной статье настройка SSL не рассматривается);
rewrite – изменяет запрошенный пользовательский URL на URL определенный правилом.
2. Редактируем vhost_alias:
# nano /etc/apache2/mods-enabled/vhost_alias.conf <VirtualHost *:80> # Данный VirtualHost обрабатывает HTTP запросы для домена site.domain.ru ServerAdmin admin@domain.ru ServerName site.domain.ru DocumentRoot "/data/www/site" </VirtualHost>
<VirtualHost *:443> # Данный VirtualHost обрабатывает HTTPS запросы для домена site.domain.ru включая переадресованные ServerAdmin admin@domain.ru ServerName site.domain.ru DocumentRoot "/data/www/site" <Directory "/data/www/site"> Options Indexes Allow from all AllowOverride All DirectoryIndex index.php </Directory> # Включаем поддержку SSL и указываем пару ключ+сертификат SSLEngine on SSLCertificateFile /etc/ssl/certs/domain.ru.crt SSLCertificateKeyFile /etc/ssl/private/domain.ru.key </VirtualHost>
3. Настраиваем rewrite
# nano /data/www/site/.htaccess # Включаем поддержку rewrite и определяем правило замены URL RewriteEngine On RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] # Дополнительные опции не имеющие отношения к rewrite Options +FollowSymLinks Options -MultiViews Allow from All
Как это работает: запрос вида http://site.domain.ru будет обработан правилом <VirtualHost *:80> определенным в файле vhost_alias.conf, согласно которому apache прочитает содержимое каталога “/data/www/site” определённого директивой DocumentRoot. Apache первым делом проверит наличие файла .htaccess и выполнит перенаправление согласно директивам Rewrite, изменив URL http://site.domain.ru на https://site.domain.ru. Измененную URL https://site.domain.ru обработает правило <VirtualHost *:443> в котором указаны директивы SSL и будет установлена защищенная сессия.
Взято с http://specnix.ru/apache/redirect-from-http-to-https-in-apache
и с http://web-optimizator.com/301-redirekt-htaccess/