Frage

Die Verwendung des Appspace von Morph Labs zum Bereitstellen einer Site bedeutet keine automatische Möglichkeit, „myapp.com“ zu „www.myapp.com“ umzuleiten (und keinen Zugriff auf .htacess).

Gibt es eine In-Rails-Möglichkeit, dies zu tun?Brauche ich ein Plugin wie Subdomain-fu?

Genauer gesagt versuche ich so etwas zu tun:

  • 'myapp.com' => 'www.myapp.com'
  • 'myapp.com/session/new' => 'www.myapp.com/session/new'

Grundsätzlich möchte ich immer, dass jeder Anfrage die Subdomain „www“ vorangestellt wird (da das SSL-Zertifikat speziell den gebräuchlichen Namen „www.myapp.com“ hat).

War es hilfreich?

Lösung

Vielleicht wie etwas, das würde den Trick tun:

class ApplicationController < ActionController::Base
  before_filter :check_uri

  def check_uri
    redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host)
  end
end

Andere Tipps

Carson Antwort funktioniert super.

Hier ist der Code in die andere Richtung zu gehen (www -> kein www)

before_filter :check_uri

def check_uri
  if /^www/.match(request.host)
    redirect_to request.protocol + request.host_with_port[4..-1] + request.request_uri 
  end
end

Ich hatte Carson Antwort zu ändern, dies in Rails zur Arbeit zu kommen 3. Ich request.uri mit request.fullpath ersetzt:

class ApplicationController < ActionController::Base
  protect_from_forgery

  Rails.env.production? do
    before_filter :check_url
  end

  def check_url
    redirect_to request.protocol + "www." + request.host_with_port + request.fullpath if !/^www/.match(request.host)
  end
end

Das funktionierte gut für mich. Ich habe eine kleine Ergänzung machen, wie ich dieses Verhalten nur in meiner Produktionsumgebung gesucht:

def check_uri
  redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host) if Rails.env == 'production'
end

Ich weiß, das beantwortet wird, aber ich dachte, alle anderen über die CodeRack wissen sollten: Canonical Host-Lösung. Das ist wirklich schön, wie es für env spezifische Umleitungen ermöglicht. http://coderack.org/users/tylerhunt/middlewares/6-canonical- Host

Hier ist ein paar verschiedene Möglichkeiten:

 head :moved_permanently, :location => ‘http://www.newdomain.com’

eine andere:

def rails_301
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.newdomain.com"
end 

Für diejenigen unter Ihnen, die auch SSL mit Heroku erzwingen möchten: Bei mir hat dies meiner Meinung nach gut funktioniert Heroku SSL auf Root-Domain

In meinen DNS-Einstellungen habe ich einen URL-/Weiterleitungseintrag eingerichtet (DNS Simple)

URL foo.com     3600        http://www.foo.com

Das CNAME-Setup muss nur für WWW eingerichtet werden

CNAME   www.foo.com 3600        providedssslendpoint.herokussl.com

Ich musste auch einen Alias ​​für mein Root einrichten

ALIAS   foo.com 3600        providedsslendpoint.herokussl.com

Dann habe ich beschlossen, einfach auszutauschen foo.com mit einer env-Variablen ENV['SITE_HOST'] (wobei SITE_HOST www.foo.com oder test.foo.com entsprechen könnte), damit ich die Kontrolle über meine Heroku-Konfiguration haben kann.Auf diese Weise kann ich steuern, was in verschiedenen Umgebungen passiert.(Informationen zum lokalen Einrichten von Umgebungsvariablen finden Sie unter https://github.com/bkeepers/dotenv)

Zum Beispiel verwendet meine Test-App test.foo.com Als URL verfügt es auch über einen eigenen SSL-Endpunkt, sodass das für mich gut funktioniert.

  before_filter :check_domain

  def check_domain
    if Rails.env.production? || Rails.env.testing? and request.host.downcase != ENV['SITE_HOST']
      redirect_to request.protocol + ENV['SITE_HOST'] + request.fullpath, :status => 301
    end
  end

Von nun an werden Endbenutzer immer mit erzwungenem SSL auf www zugreifen.Bei alten Links kommt es zu einem leichten Hängenbleiben, aber nichts Auffälliges.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top