Je cherche à apprendre à nettoyer les URL de mes applications. Mon application est alimentée par Rails 3 sur Heroku.
L'URL souhaitée est https://www.example.comite.com
Je voudrais rediriger toutes les URL contrairement à ce qui précède sur cette URL. Est-ce un Rails chose ou DNS?
Mauvaises URL:
https://example.comite.com
http://www.example.comite.com
http://example.comite.com
Et si quelque chose est traînant, comme http://www.example.comite.com/photo/1
Pour que l'URL soit redirigée avec le chemin: https://www.example.comite.com/photo/1
Les enregistrements DNS ne peuvent pas définir le protocole d'un domaine, vous ne pouvez donc pas rediriger http://
à https://
via DNS. Le faire à travers la configuration du serveur Web n'est pas portable, difficile à faire, d'erreur sujette et simplement obsolète. C'est un travail mieux géré par le Rails routeur.
# 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 => "" }
Comme une extension à Réponse d'User2100689 , IN Rails 3+ Vous pouvez utiliser config.force_ssl = true
in config/environnements/production.rb
La ligne peut simplement être non motivée comme suit
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
Vous pouvez toujours jeter cela dans votre production.rb ... config.use_ssl = true
Parce que c'est Heroku, vous ne pouvez pas utiliser Apache ou Nginx Configs. Ce que vous pouvez faire est de mettre un fichier avant_filter dans votre applicationController, en supposant que vous avez 3 contrôleurs ou plus comme ceux-ci ci-dessous, bien que bien sûr, ils seront dans des fichiers distincts
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
Vous avez peut-être aussi besoin de violez un peu vos itinéraires lorsque vous utilisez Concevez, mais je soupçonne que c'était comme ça que nous l'avons fait, donc je ne vais pas entrer dans ces détails ici, et j'ai modifié le code ci-dessus pour éviter cette complication.
heureux piratage.
Rails 3.1.0 et supérieur a force_ssl
, qui est une méthode de contrôleur qui redirigera vers HTTPS pour les environnements non de développement.
http://api.rubyonrails.org/classes/actioncontroller/forcessl/classmethods.html
Placez-le dans chaque contrôleur que vous souhaitez rediriger, ou mieux encore, placez-le dans votre applicationController:
app/Contrôleurs/Application.RB:
class ApplicationController < ActionController::Base
# ...
force_ssl
# ...
end
C'est une bonne chose à inclure toujours dans vos applications (et bien sûr, vous devrez obtenir un certificat). Https partout!