Как принудительно установить SSL и перенаправить URL-адрес домена www?

У меня есть домен на example.com и https://example.com на Heroku. У меня есть перенаправление URL-адреса на моем сервере имен с www на https://example.com. У меня config.force_ssl = true установлен в config/environment/production.rb. Перенаправление URL-адреса домена работает только по http, а не по https. Он работает в Chrome, когда я впервые набираю www.example.com. Однако во второй раз, когда я использую www.example.com, это не удается. Он дает ERR_CONNECTION_REFUSED с внутренним перенаправлением 307.

Status Code: 307 Internal Redirect
Location: https://www.example.com/
Non-Authoritative-Reason: HSTS

И это несмотря на то, что служба домена всегда передает Location: https://example.com через curl. Откуда Chrome получает https://www*? Я видел https://superuser.com/a/881431/130929 об удалении записей HSTS из Chrome на chrome://net-internals/#hsts. Если я сделаю это как для example.com, так и для www.example.com, то для www.example.com это сработает только в первый раз. example.com и https://example.com всегда работают. Что еще хуже, в Firefox после загрузки страницы простое использование example.com не работает, потому что Firefox автоматически добавляет https://www. Как я могу использовать HTTPS в корневом домене и перенаправить www в корневой домен? Я не забочусь об обращении с https://www.example.com, так как никто не стал бы это печатать. Они только по ошибке наберут www.example.com.


person Chloe    schedule 12.06.2018    source источник
comment
У вас есть сертификат SSL?   -  person Akash Pinnaka    schedule 12.06.2018
comment
Да, посмотрите ту часть, где я говорю I have a domain running on ... https://example.com. Это в первом предложении. Также посмотрите часть, где я говорю https://example.com always works, внизу.   -  person Chloe    schedule 12.06.2018


Ответы (1)


Хорошо, я исправил это с помощью этого ответа http://stackoverflow.com/questions/10629397/ddg#10632901

Я видел в curl -i https://example.com, что он возвращается

Strict-Transport-Security: max-age=15552000; includeSubDomains

Максимальный возраст - 6 месяцев. includeSubDomains, вероятно, означает включить www. Я добавил

class ApplicationController < ActionController::Base
  before_action :disable_hsts_subdomains

  def disable_hsts_subdomains
    response.headers["Strict-Transport-Security"] = 'max-age=15552000;'
  end

Которая просто удалила includeSubDomains, чтобы он не пытался перенаправить www, не обращаясь сначала к хосту (DNS-серверу), который отправил бы перенаправление на правильный корневой домен.

person Chloe    schedule 12.06.2018