Ive tried multiple ideas to get this to work, but keep hitting a dead end. Has anyone done this before? I want joe.domain.com to display www.domain.com/profile/joe Im using lighttpd. Routes dont have access to the URL string and therefore I cant code in a conditional. lighttpd rewrite seems to really screw it all up. Is there a feasible solution? Thank you, Joe Noon
Maybe I missed something previously in this thread, but can''t you just do: # handish virtual hosting # map all domains of a top-level-domain to a single document-root $HTTP["host"] =~ "(^|\.)example\.org$" { server.document-root = "/var/www/htdocs/example.org/pages/" } Taken from here: http://www.lighttpd.net/documentation/configuration.html b PS: anyone know what "handish" means? Joe Noon wrote:> Ive tried multiple ideas to get this to work, but keep hitting a dead > end. Has anyone done this before? > > I want joe.domain.com to display www.domain.com/profile/joe > > Im using lighttpd. > > Routes dont have access to the URL string and therefore I cant code in > a conditional. lighttpd rewrite seems to really screw it all up. Is > there a feasible solution? > > Thank you, > > Joe Noon > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails
> $HTTP["host"] =~ "(^|\.)example\.org$" { > server.document-root = "/var/www/htdocs/example.org/pages/" > }I don''t want to do anything with document root, since document root will always be the same for the whole project no matter whats params I''m passing in. To further explain, I need to get joe.test.com to translate to www.test.com/profile/show/joe (:controller "profile" :action "show" :id "joe") I don''t want to redirect. Ive thought of using the render_component, but that starts to become ugly. Any other solutions out there? Joe Noon
Joe, something like this maybe ? http://textsnippets.com/posts/show/5 evhost isn''t very well documented, but this shows the available variables at least. On 1/25/06, Joe Noon <joenoon@gmail.com> wrote:> > > $HTTP["host"] =~ "(^|\.)example\.org$" { > > server.document-root = "/var/www/htdocs/example.org/pages/" > > } > > I don''t want to do anything with document root, since document root > will always be the same for the whole project no matter whats params > I''m passing in. > > To further explain, I need to get joe.test.com to translate to > www.test.com/profile/show/joe (:controller "profile" :action "show" > :id "joe") > > I don''t want to redirect. Ive thought of using the render_component, > but that starts to become ugly. Any other solutions out there? > > Joe Noon > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060125/c527a789/attachment-0001.html
Yeah, I see your point... configuring in lighty would map different subdomains to different apps. But you want it all to go to the same app, remapped to an action based on the subdomain. I think your only option is to map everything at test.com to your app (in lighty) and then write something on the rails side to reinterpret the url as needed. The stock comment in application.rb says "Filters added to this controller will be run for all controllers in the application". So, sounds like you need to write a filter that checks the host for <username>.test.com and fowards internally based on what it finds. That or maybe it''s possible to get access to the host name in routes.rb... ??? I''m too green to throw out the code... any takers out there? b Joe Noon wrote:>>$HTTP["host"] =~ "(^|\.)example\.org$" { >> server.document-root = "/var/www/htdocs/example.org/pages/" >>} > > > I don''t want to do anything with document root, since document root > will always be the same for the whole project no matter whats params > I''m passing in. > > To further explain, I need to get joe.test.com to translate to > www.test.com/profile/show/joe (:controller "profile" :action "show" > :id "joe") > > I don''t want to redirect. Ive thought of using the render_component, > but that starts to become ugly. Any other solutions out there? > > Joe Noon > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails
Here is one way to solve you problem. Its slightly different from what you wanted as far as mapping to the url you want but its another way to use the subdomain as account key: In application.rb --------------------------- # The filters added to this controller will be run for all controllers in the application. # Likewise will all the methods added be available for all controllers. require ''user_system'' require ''account_location'' class ApplicationController < ActionController::Base include UserSystem include AccountLocation before_filter :setup_environment, :except => [:new, :create, :signup] protected def setup_environment if @account = Account.find_by_company_abbrev (request.subdomains.first) @session[''account_id''] ||= @account.id else redirect_to :controller => ''user'', :action => ''login'' end end end ---------------------------- in lib/account_location --------------------------- module AccountLocation def self.included(controller) controller.helper_method (:account_domain, :account_host, :account_url) end protected def default_account_subdomain @account.company_abbrev if @account && @account.respond_to? (:company_abbrev) || "default" end def account_url(account_subdomain = default_account_subdomain, use_ssl = request.ssl?) (use_ssl ? "https://" : "http://") + account_host (account_subdomain) end def account_host(account_subdomain = default_account_subdomain) account_host = "" account_host << account_subdomain + "." account_host << account_domain end def account_domain account_domain = "" account_domain << request.subdomains[1..-1].join(".") + "." if request.subdomains.size > 1 account_domain << request.domain + request.port_string end end With this method I have an Account model that stores the username as the subdomain key. this before filter gets run on each request and takes the subdomain from the url and grabs the user that matches it. Then it sets session[:account_id] to @account.id unless it is already set. The rest of the methods in the AccountLocation module are just for creating the correct links that always include the subdomain. So with this method, instead of redirecting joe.example.com to example.com/user/joe, the url just always stays joe.example.com whenever they are logged in. Much simpler then what you want to do I think ;-) Cheers- -Ezra Zygmuntowicz Yakima Herald-Republic WebMaster http://yakimaherald.com 509-577-7732 ezra@yakima-herald.com
How about using something like the following in a before_filter in application.rb? # Grab the subdomain and render appropriately @subdomain = request.subdomains.first params[:id] = @subdomain ProfileController::show render :controller => ''profile'', :action => ''show'' Does that make any sense? -Bill On 1/25/06, Ben Munat <bent@munat.com> wrote:> > Yeah, I see your point... configuring in lighty would map different > subdomains to > different apps. But you want it all to go to the same app, remapped to an > action based on > the subdomain. > > I think your only option is to map everything at test.com to your app (in > lighty) and then > write something on the rails side to reinterpret the url as needed. > > The stock comment in application.rb says "Filters added to this controller > will be run for > all controllers in the application". So, sounds like you need to write a > filter that > checks the host for <username>.test.com and fowards internally based on > what it finds. > > That or maybe it''s possible to get access to the host name in routes.rb... > ??? > > I''m too green to throw out the code... any takers out there? > > b > > Joe Noon wrote: > >>$HTTP["host"] =~ "(^|\.)example\.org$" { > >> server.document-root = "/var/www/htdocs/example.org/pages/" > >>} > > > > > > I don''t want to do anything with document root, since document root > > will always be the same for the whole project no matter whats params > > I''m passing in. > > > > To further explain, I need to get joe.test.com to translate to > > www.test.com/profile/show/joe (:controller "profile" :action "show" > > :id "joe") > > > > I don''t want to redirect. Ive thought of using the render_component, > > but that starts to become ugly. Any other solutions out there? > > > > Joe Noon > > _______________________________________________ > > Rails mailing list > > Rails@lists.rubyonrails.org > > http://lists.rubyonrails.org/mailman/listinfo/rails > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060125/54653714/attachment.html