Rails - Как перенаправить с http://example.com на https://www.example.com - PullRequest
32 голосов
/ 02 декабря 2010

Я хочу узнать, как очистить URL-адреса моего приложения.Мое приложение работает на Rails 3 на Heroku.

Требуемый URL-адрес https://www.example.comite.com

Я бы хотел перенаправить все URL-адреса, в отличие от вышеупомянутого, на этот URL-адрес.Это вещь Rails или DNS?

Неверные URL:

https://example.comite.com
http://www.example.comite.com
http://example.comite.com

И если что-то тянется, как http://www.example.comite.com/photo/1 для URL, который будет перенаправлен с путем: https://www.example.comite.com/photo/1

Ответы [ 6 ]

47 голосов
/ 03 февраля 2014

В качестве расширения ответа пользователя 2100689 , в Rails 3+ вы можете использовать config.force_ssl = true в config / средах / production.rb

Строка может быть прокомментирована следующим образом

# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
18 голосов
/ 02 декабря 2010

DNS-записи не могут определить протокол для домена, поэтому вы не можете перенаправить http:// на https:// через DNS. Выполнение этого через конфигурацию веб-сервера не переносимо, сложно, подвержено ошибкам и просто устарело. Эту работу лучше всего выполнять с помощью маршрутизатора Rails.

# beginning of routes.rb 
match "*path" => redirect("https://www.mysite.com/%{path}"), :constraints => { :protocol => "http://" }
match "*path" => redirect("https://www.mysite.com/%{path}"), :constraints => { :subdomain => "" }
7 голосов
/ 01 марта 2013

Вы всегда можете скинуть это в своей продукции. Rb ... config.use_ssl = true

7 голосов
/ 22 февраля 2013

Rails 3.1.0 и выше имеет force_ssl, который является методом контроллера, который будет перенаправлять на https для не-сред разработки.

http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html

Поместите его в каждый контроллеркоторый вы хотите перенаправить или, что еще лучше, поместите его в свой ApplicationController:

app / controllers / application.rb:

class ApplicationController < ActionController::Base
  # ...
  force_ssl
  # ...
end

Это хорошая вещь, которую всегда следует включать в ваши приложения(и, конечно, вам придется получить сертификат).HTTPS везде!

7 голосов
/ 06 апреля 2011

Поскольку это Heroku, вы не можете использовать конфиги apache или nginx.Что вы можете сделать, это поместить before_filter в свой ApplicationController, предполагая, что у вас есть 3 или более контроллеров, подобных этим ниже, хотя, конечно, они будут в отдельных файлахнемного при использовании devise, но я подозреваю, что именно так мы и сделали, поэтому я не буду вдаваться в эти детали, и я изменил приведенный выше код, чтобы избежать этого осложнения.

счастливого взлома.

0 голосов
/ 02 декабря 2010

Сделайте это в вашем файле vhosts.

Настройка SSL vhost.

В вашем стандартном порту 80 виртуальный хост. Добавьте это в конфиг:

Redirect permanent / https://www.mysite.com

Это перенаправит все запросы порта 80 на https.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...