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

157

Окружающая среда 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]

Любые идеи?

Дино
источник

Ответы:

210

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

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName mysite.example.com
   Redirect permanent / https://mysite.example.com/
</VirtualHost>

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

Затем сделайте:

/etc/init.d/httpd restart

Дино
источник
7
Обратите внимание, что это доступно только если у вас есть доступ к файлу VirtualHost. Это рекомендуемый метод.
foochow
4
После изменения этого на httpd.conf перезапустите веб-сервер apache. чтобы он также отражал и очищал кеш вашего браузера.
Суриан Суреш
2
Я хотел бы сообщить, что этот метод не работал для меня с Ubuntu 12.4, однако предложенный ответ RewriteEngine добился цели.
Деано
2
Вы должны сделать перезагрузку? перезагрузка гораздо менее разрушительна и принесет новый файл конфигурации. /etc/init.d/httpd reload|| service httpd reload
Ребекка Дессонвилль
3
поскольку цель состояла в том, чтобы перенаправить его в режим ssl, линия DocumentRoot /usr/local/apache2/htdocsбольше не нужна
Абель Каллехо
130
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

IdemeNaHavaj
источник
3
Это лучшее решение, чем одобренное, потому что оно работает, даже если вы используете SSL-загрузчик, такой как Pound или BigIP. Эти оффлоадеры часто пропускают весь трафик на один и тот же порт, и утвержденное решение не будет работать в этом конкретном случае
spiritoo
1
@ Spiritoo Не так. В документации Apache конкретно сказано, что это одна из тех ситуаций, когда вам не следует использовать mod_rewrite и лучше использовать Redirect: httpd.apache.org/docs/2.4/rewrite/avoid.html
Люк Мадханга,
4
@LukeMadhanga Apache рекомендует использовать Redirect для повышения производительности. Но, тем не менее, решение RewriteEngine лучше, в смысле более общего, потому что оно работает даже в описанном мной случае (разгрузка). Цель моего комментария - предоставить каждому пользователю ключ для выбора между двумя ответами. Некоторые люди хотят общих процедур (большой корпус), другие хотят производительности ... это свободный выбор.
Spiritoo
20
Это здорово, однако, если вы хотите увеличить его, добавьте это [R = 302, L, QSA], чтобы любые параметры также передавались на защищенную страницу. Это должно выглядеть так:% {REQUEST_URI} [R = 302, L, QSA]
Святослав Маринов
Я использовал эти строки и при попытке загрузить страницу, ответ «Не удалось загрузить ресурс: net :: ERR_CONNECTION_REFUSED». Что я делаю не так?
Серкан
98

Искал 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
Йосеф Харуш
источник
Работа с Ubuntu 16.04 и Apache2. Спасибо!
Сильвестр Яо
11

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

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}/$1
5ervant
источник
11

Использование 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 - переписатьHTTPToHTTPS

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

 R=301

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

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
Vincy
источник
6

Если у вас есть проверка Apache2.4 000-default.conf- удалите DocumentRootи добавьте

Redirect permanent / https://[your-domain]/
равнодушие
источник
5

Версия сервера: Apache / 2.4.29 (Ubuntu)

После долгих поисков в Интернете и в официальной документации apache единственное решение, которое мне помогло, пришло с /usr/share/doc/apache2/README.Debian.gz

To enable SSL, type (as user root):

    a2ensite default-ssl
    a2enmod ssl

В файле /etc/apache2/sites-available/000-default.conf добавьте

Редирект "/" " https://sub.domain.com/ "

<VirtualHost *:80>

    #ServerName www.example.com
    DocumentRoot /var/www/owncloud
    Redirect "/" "https://sub.domain.com/"

Вот и все.


PS: если вы хотите прочитать руководство без распаковки:

gunzip -cd /usr/share/doc/apache2/README.Debian.gz
DimiDak
источник
3

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

RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]
Финт
источник
3

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

# ----------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]

user7817632
источник
2

Пожалуйста, попробуйте это в конфигурации виртуального хостинга Apache, а затем перезагрузите службу Apache.

RewriteEngine On

RewriteCond %{HTTPS} off


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
МД ИРФАН
источник
-1

Мне нужно было это для чего-то такого простого, как перенаправление всего httpтрафика с домашней страницы apache по умолчанию на моем сервере на другую https.

Поскольку я все еще довольно зелен, когда дело доходит до настройки apache, я предпочитаю избегать использования mod_rewriteнапрямую и вместо этого пошел на что-то более простое, как это:

<VirtualHost *:80>
  <Location "/">
     Redirect permanent "https://%{HTTP_HOST}%{REQUEST_URI}"
  </Location>
</VirtualHost>

<VirtualHost *:443>
  DocumentRoot "/var/www/html"
  SSLEngine on
  ...
</VirtualHost>

Мне это нравится, потому что это позволило мне использовать переменные apache и таким образом мне не нужно было указывать фактическое имя хоста, поскольку это просто IP-адрес без связанного доменного имени.

Ссылки: https://stackoverflow.com/a/40291044/2089675

smac89
источник