Rails路由和子域名:404的未知URL

时间:2018-01-26 17:51:59

标签: ruby-on-rails ruby routes

我遇到路线问题,试图谷歌但到目前为止没有出现。如果有人能够解释,如何工作和解决方案,那将是伟大的。

谢谢, 干杯:)

示例:

1)

  

默认网址:lvh.me:3000 /餐馆

默认网址工作正常,但一旦添加任何未知的子网域。

  

添加未知子域名:blabla.lvh.me/restaurants

它仍然访问lvh.me/restaurants,并显示子域名的网址。

  

好的,让我们从路线添加已知的子域名:   platform.lvh.me/restaurants

它仍然访问lvh.me/restaurants,并显示子域名的网址。 管理员和平台子域的反应方式相同。

2)  同样的事情发生在:mobile和其他额外路线上

路线:

namespace :admin, path: '/' do
   root to: 'pages#index'
end

constraints subdomain: 'platform' do
   namespace :platform, path: '/' do
      resources :categories
      root 'pages#index'
   end
end

resources :restaurants
    root 'pages#index'
end

1 个答案:

答案 0 :(得分:0)

默认情况下,

Rails路由搜索给定的URL以查找所有路由,无论是子域,还是约束......

示例:

默认网址:lvh.me/restaurants

如果要使用任何子域admin.lvh.me/restaurants,它仍会从默认网址中找到并呈现。管理员子域dnt有restaurants个网址。

<强>解决方案:

  

需要在每个子域之后添加:match '*a' => redirect(path: '/'), via: :get

     

或渲染其他网页,例如404/500:match '*a', :to => 'errors#not_found', via: :get

否则,将更进一步并从默认网址呈现。

namespace :admin, path: '/' do
   root to: 'pages#index'
   match '*a' => redirect(path: '/'), via: :get
end

constraints subdomain: 'platform' do
   namespace :platform, path: '/' do
      resources :categories
      root 'pages#index'

      match '*a' => redirect(path: '/'), via: :get
   end
end

resources :restaurants
    root 'pages#index'
    match '*a' => redirect(path: '/'), via: :get
end