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]

Будь-які ідеї?

Відповіді:


209

Я насправді наслідував цей приклад, і він працював на мене :)

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більше не потрібен
— Abel Callejo

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 докомандує використанням перенаправлення для продуктивності. Але все-таки рішення RewriteEngine є кращим, в сенсі більш загальним, оскільки воно працює навіть у випадку, який я описав (вивантажуючи). Мета мого коментаря - надати кожному користувачеві ключ на вибір між двома відповідями. Деякі хочуть загальних процедур (великий корпус), інші хочуть виконання ... це вільний вибір.
— спірито

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)

Після тривалого пошуку в Інтернеті та в офіційній документації апачі, єдине рішення, яке працювало на мене, прийшло з /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 Virtualhosting та перезавантажте службу apache

RewriteEngine On

RewriteCond %{HTTPS} off


RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}

-1

Мені це знадобилося для чогось такого простого, як перенаправлення всього httpтрафіку з домашньої сторінки апаше за замовчуванням на моєму сервері на одну, на яку надходив сервер 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.