.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?
Спасибо!
Ответы
Ответ 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}