перенаправление с http на https apache

101

Среда Centos с apache

Попытка настроить автоматическое перенаправление с http на https

From manage.mydomain.com --- To ---> https://manage.mydomain.com 

Я попытался добавить следующее в свой httpd.conf, но он не работал

 RewriteEngine on
    ReWriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L]

Любые идеи?

Теги:
webserver

7 ответов

158
Лучший ответ

Я действительно следовал этому примеру, и это сработало для меня:)

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName mysite.example.com
   DocumentRoot /usr/local/apache2/htdocs 
   Redirect permanent / https://mysite.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName mysite.example.com
  DocumentRoot /usr/local/apache2/htdocs
  SSLEngine On
 # etc...
</VirtualHost>

Тогда do:

/etc/init.d/httpd restart

  • 6
    Обратите внимание, что это доступно только если у вас есть доступ к файлу VirtualHost. Это рекомендуемый метод.
  • 4
    После изменения этого в httpd.conf перезапустите веб-сервер apache. чтобы он также отражал и очищал кеш вашего браузера.
Показать ещё 7 комментариев
84
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

http://www.sslshopper.com/apache-redirect-http-to-https.html

или

http://www.cyberciti.biz/tips/howto-apache-force-https-secure-connections.html

  • 2
    Это лучшее решение, чем утвержденное, потому что оно работает, даже если вы находитесь за сторонним загрузчиком SSL, таким как Pound или BigIP. Эти оффлоадеры часто передают весь трафик на один и тот же порт, и утвержденное решение не будет работать в этом конкретном случае.
  • 1
    @ Spiritoo Не так. В документации Apache конкретно говорится, что это одна из тех ситуаций, когда вам не следует использовать mod_rewrite, а лучше использовать Redirect: httpd.apache.org/docs/2.4/rewrite/avoid.html.
Показать ещё 9 комментариев
58

Искал apache redirect http to https и приземлился здесь. Это то, что я сделал на ubuntu:

1) Включить модули

sudo a2enmod rewrite
sudo a2enmod ssl

2) Отредактируйте конфигурацию своего сайта

Редактировать файл

/etc/apache2/sites-available/000-default.conf

Содержимое должно быть:

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    <path to your crt file>
    SSLCertificateKeyFile   <path to your private key file>

    # Rest of your site config
    # ...
</VirtualHost>

3) Перезапустите apache2

sudo service apache2 restart
  • 6
    SEO: используйте перенаправления 301, чтобы указать все URL-адреса HTTP на HTTPS !!!
  • 1
    Очень хороший ответ
7

Собственно, ваша тема принадлежит https://serverfault.com/, но вы все равно можете проверить эти директивы .htaccess:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1
1

Использование mod_rewrite - это не рекомендуемый способ вместо этого использовать виртуальный хост и перенаправление.

В случае, если вы склонны делать это с помощью mod_rewrite:

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same 
location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in
# httpd.conf or .htaccess context

Ссылка: Httpd Wiki - RewriteHTTPToHTTPS

Если вы ищете 301 Перманентный переадресация, флаг перенаправления должен быть таким, как

 R=301

поэтому RewriteRule будет похож на

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
1

Этот код работает для меня.

# ----------port 80----------
RewriteEngine on
# redirect http non-www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# redirect http www to https www
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

# ----------port 443----------
RewriteEngine on
# redirect https non-www to https www
RewriteCond %{SERVER_NAME} !^www\.(.*)$ [NC]
RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

1

Это сработало для меня:

RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню