2016-04-14 10 views
0

Ich habe eine Anwendung, in der Anforderungen von Domäne oder Unterdomäne kommen können. Zum Beispiel:Wie alle Routen von einer Unterdomäne zu einem Pfad umgeleitet werden

admin.example.com wird auf example.com/admin umgeleitet. Ich habe dies über Nginx-Konfiguration erreicht. Aber das Problem ist, dass wir für jede Umgebung/Dev-Maschine nginx.conf einrichten müssen. Ich würde gerne auf Schienenroutenebene machen.

, d. H. Alle Anfragen, die von admin.example.com empfangen wurden, sollten über Schienen-Routing zu example.com/admin umgeleitet werden. Außerdem muss ich sicherstellen, dass devise Authentifizierung nicht bricht.

ein Ausschnitt aus routes.rb

Rails.application.routes.draw do 
    root 'home#index' # Domain request 

    devise_for :admins, controllers: { 
         sessions: 'admin/sessions', 
         registrations: 'admin/registrations', 
         passwords: 'admin/passwords', 
         invitations: 'admin/invitations' 
        } 
    namespace :admin do 
    devise_scope :admin do 
     root 'dashboards#show' 
     get '/contact-us' => '/home#contact_us' 

     resource :dashboard 
     resources :users, :only => [:index, :create, :update] 
     resources :admins, :customers 
     concerns :notifiable 
.. 
.. 
    end 
    end 
end 

Dank

Antwort

0

Ich würde versuchen, alle Routen zu wickeln innerhalb eines Constraint-Block in Kombination mit einem "catch-all" -Route:

Rails.application.routes.draw do 
    constraints subdomain: 'www' do 
    # ... all routes routes ... 
    end 
    match '*path' => 'your_controller#your_action', via: :all 
end 

Dann innerhalb des Controllers, haben Sie Zugriff auf request.subdomain haben, request.domain, request.path etc. und Sie können Ihre Umleitung konstruieren zu Ihnen passen r braucht.