Подтвердить что ты не робот

.htaccess перенаправить http на https

У меня есть старый url (www1.test.net), и я хотел бы перенаправить его на https://www1.test.net
Я внедрил и установил наш SSL-сертификат на своем сайте.
Это мой старый файл .htaccess:

RewriteEngine On
RewriteRule !\.(js|gif|jpg|png|css|txt)$ public/index.php [L]
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]

Как настроить файл .htaccess, чтобы URL-адрес автоматически перенаправлялся на https?
Спасибо!

4b9b3361

Ответ 1

Обновление 2016

Поскольку этот ответ получает некоторое внимание, я хочу намекнуть на более рекомендуемый способ сделать это с помощью виртуальных хостов: Apache: Перенаправить SSL

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

Старый ответ, хакерская вещь если ваш ssl-порт не установлен в 80, это будет работать:

RewriteEngine on

# force ssl
RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

Обратите внимание, что это должно быть ваше первое правило перезаписи.

Изменить: Этот код выполняет следующие действия. RewriteCond (ition) проверяет, имеет ли сервер ServerPort запрос 80 (который является http-портом по умолчанию, если вы указали другой порт, вам придется отрегулировать условие к нему). Если это так, мы сопоставляем весь URL (.*) и перенаправляем его на https-url. %{SERVER_NAME} может быть заменен определенным URL-адресом, но таким образом вам не нужно изменять код для других проектов. %{REQUEST_URI} - это часть URL-адреса после TLD (домен верхнего уровня), поэтому вы будете перенаправлены туда, откуда вы пришли, но как https.

Ответ 2

Я использую следующее, чтобы успешно перенаправить все страницы моего домена с http на https:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Обратите внимание, что это перенаправит с помощью перенаправления 301 'permanently moved', что поможет вам перенести ваши рейтинги SEO.

Чтобы перенаправить с помощью изменения 302 'temporarily moved' [R=302,L]

Ответ 3

Это лучшее для www и для пользователей https, proxy и не прокси.

RewriteEngine On

### WWW & HTTPS

# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

### WWW & HTTPS

Ответ 4

Я заставляю https следующим кодом:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Ответ 5

Поиск наилучшего способа перенаправления, я нашел это (исходя из html5boilerplate):

# ----------------------------------------------------------------------
# | HTTP Strict Transport Security (HSTS)                              |
# ----------------------------------------------------------------------

# Force client-side SSL redirection.
#
# If a user types `example.com` in their browser, even if the server
# redirects them to the secure version of the website, that still leaves
# a window of opportunity (the initial HTTP connection) for an attacker
# to downgrade or redirect the request.
#
# The following header ensures that browser will ONLY connect to your
# server via HTTPS, regardless of what the users type in the browser's
# address bar.
#
# (!) Remove the `includeSubDomains` optional directive if the website's
# subdomains are not using HTTPS.
#
# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
# https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1
# http://blogs.msdn.com/b/ieinternals/archive/2014/08/18/hsts-strict-transport-security-attacks-mitigations-deployment-https.aspx

Header set Strict-Transport-Security "max-age=16070400; includeSubDomains"

Может быть, это поможет кому-то в 2017 году!:)

Ответ 6

У меня также была проблема с перенаправлением. Я попробовал все, что было предложено в Stackoverflow. Единственный случай, который я нашел сам, - это:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Ответ 7

В случаях, когда соединение HTTPS/SSL завершается на балансировщике нагрузки, и весь трафик отправляется экземплярам на порт 80, для перенаправления небезопасного трафика работает следующее правило.

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Убедитесь, что модуль mod_rewrite загружен.

Ответ 8

Добавьте этот код в конец вашего .htaccess файла

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}