除了一种模式外,我如何在所有路线中使用通配符?

How can I use wildcards in my routes for all of them excepted for one pattern?

我想使用 React-Router 来处理来自访问者部分的大部分页面,同时创建一个单页应用程序。但是,我想确保如果用户键入 /admin,他不会得到 "redirected" 到 root_path

到目前为止,我只能设法将所有内容传递给通配符或按如下方式制作 "compartiments":

root 'home#index'
# example 1
get '/*path' => 'home#index'
get '/articles' => 'home#articles_index'
# example 2
get '/articles/*all' => 'home#articles_index'
# vain try 1
get '/*path' => 'home#index', except: :admin
# vain try 2
get '/*path' => 'home#index', except: '/admin'

我发现了约束,但我意识到这是为了确保 url 被正确传递(即,整数而不是字符串)但它没有 "blacklist" urls.

有什么想法吗?

提前致谢

为此,您可以使用带约束的通配符段。例如:

# config/routes.rb
Rails.application.routes.draw do
  root to: 'home#index'
  get '*subroute', to: 'home#index', constraints: { subroute: /(?!admin|login|logout).*/ }

  # all another routes below
end

这会将任何请求传递给 home#index,除非 URL 中有 'admin' 或 'login' 或 'logout'。