1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# in config/routes.rb
map.connect '', :controller => 'domain_tests', :action => 'domain1', :conditions => {:hostname => "domain1"}
map.connect '', :controller => 'domain_tests', :action => 'domain2', :conditions => {:hostname => "domain2"}

# in config/environment.rb after the initialize section
module ActionController
  module Routing
    class RouteSet
      def extract_request_environment(request)
        { :method => request.method, :hostname => request.domain.split('.').first }
      end
    end
    class Route
      alias_method :old_recognition_conditions, :recognition_conditions
      def recognition_conditions
        result = old_recognition_conditions
        result << "conditions[:hostname] === env[:hostname]" if conditions[:hostname]
        result
      end
    end
  end
end

# courtesy of http://www.smallroomsoftware.com/articles/2007/2/10/rails-routing-based-on-hostname

# in app/domain_tests_controller.rb
def domain1
  render :text => "you've hit domain one"
end

def domain2
  render :text => "you've hit domain two"
end