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.