перенаправление 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


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

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]

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

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]


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.