2012-05-15 12 views
14

myślę, że to powinno być dość łatwe, ale nie jestem pewny, jak to się robi ...Szyny: przekierowanie do bieżącej ścieżki, ale innej subdomenie

Jak napisać przed filtrem, który sprawdza, czy bieżące zamówienie dotyczy niektórych subdomen, a jeśli tak, to przekieruj go do tego samego adresu URL, ale na inną poddomanę?

Np .: blog.myapp.com/posts/1 jest w porządku, ale blog.myapp.com/products/123 przekierowuje do www.myapp.com/products/123.

myślałem coś takiego ...

class ApplicationController < ActionController::Base 
    before_filter :ensure_domain 

    protected 
    def ensure_domain 
    if request.subdomain == 'blog' && controller_name != 'posts' 
     redirect_to # the same url but at the 'www' subdomain... 
    end 
    end 
end 

Jak można napisać, że przekierowanie?

Odpowiedz

12

ActionController::Redirecting#redirect_to pozwala przekazać bezwzględny adres URL, więc najprostszym rozwiązaniem byłoby, aby przekazać ją jedną z czymś takim:

redirect_to request.url.sub('blog', 'www') 
+0

Ach, ja nie wiedziałem, że 'metoda .sub' istniał! Dzięki! – Andrew

+6

Doh! Metoda sub jest po prostu zwykłą, starą metodą ruby ​​sub ... ok, więc po dalszych eksperymentach to działa, ale muszę użyć więcej regex, aby się tym zająć. Obiekt 'request.url' daje mi wystarczająco dużo, aby dowiedzieć się resztę, dzięki! – Andrew

+0

Po prostu miej nadzieję, że nigdy nie masz nigdzie indziej w swoich adresach URL ... – Qwertie

2

prosty wybór przekierowanie z subdomeny do subdomeny byłby następujący redirect_to subdomain: 'www', :controller => 'www', :action => "index"

ten będzie nazywany w nazwie domeny np foo.apple.com by następnie przejść do www.apple.com

Powiązane problemy