Rails - как перенаправить с http://example.com на https://www.example.com
Я хочу узнать, как очистить 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
Ответы
Ответ 1
Записи 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 => "" }
Ответ 2
Как расширение user2100689 answer, в Rails 3+ вы можете использовать config.force_ssl = true
в config/environment/production.rb
Линию можно просто расколоть следующим образом
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
Ответ 3
Вы всегда можете бросить это в своем production.rb... config.use_ssl = true
Ответ 4
Поскольку это Heroku, вы не можете использовать конфигурации apache или nginx. Что вы можете сделать, так это поставить перед вашим фильтром before_filter, если у вас есть 3 или более контроллера
эти ниже, хотя, конечно, они будут в отдельных файлах
class ApplicationController < ActionController::Base
def redirect_https
redirect_to :protocol => "https://" unless request.ssl?
return true
end
before_filter :redirect_https
end
class TypicalController < ApplicationController
def blah
end
end
class HomePageController < ApplicationController
skip_before_filter :redirect_https
end
Вам также может понадобиться немного погладить свои маршруты при использовании программы, но я подозреваю, что это было
просто так, как мы это сделали, поэтому я не буду вдаваться в эти подробности здесь, и я изменил код
выше, чтобы избежать этого осложнения.
счастливый взлом.
Ответ 5
Rails 3.1.0 и выше имеет force_ssl
, который является методом контроллера, который будет перенаправлять на https для сред, не относящихся к разработке.
http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html
Поместите его в каждый контроллер, который вы хотите перенаправить, или еще лучше, поместите его в свой ApplicationController:
приложение/контроллеры/application.rb:
class ApplicationController < ActionController::Base
# ...
force_ssl
# ...
end
Это хорошая вещь, которая всегда включается в ваши приложения (и, конечно же, вам нужно будет получить сертификат). HTTPS везде!
Ответ 6
Сделайте это в своем файле vhosts.
Настройка хоста SSL.
В вашем стандартном порту 80 виртуальный хост. Добавьте это в конфигурацию:
Redirect permanent / https://www.mysite.com
Это переадресует все запросы на порт 80 на https.