【问题标题】:Rails routes: redirect a wild card routeRails 路线:重定向通配符路线
【发布时间】:2016-07-21 16:36:01
【问题描述】:

我有一个用 Ruby on Rails 构建的网站和一个用 WordPress 构建的博客。主站点的 url 是 example.com,博客的 url 是 blog.example.com。由于搜索引擎索引站点的方式以及对目录博客而不是子域博客的偏好,我想实现一个永久重定向,以便example.com/blog/anything 将重定向到blog.example.com/anything,无论 url 包含多少斜杠或参数.所以即使example.com/blog/a/b/c/d/e?google=true 也应该重定向到blog.example.com/a/b/c/d/e?google=true

到目前为止,如果博客之后只有一个目录,则以下工作:

  get '/blog/:what', to: redirect('http://blog.codeundercover.com/%{what}')

然而,无论/blog 之后的文本是什么,我都需要它来工作。我该怎么做?

【问题讨论】:

  • 我不认为这是我会在 Rails 路由器中处理的事情。这是应该在服务器级别处理的事情。

标签: ruby-on-rails ruby ruby-on-rails-4 rails-routing


【解决方案1】:

您的路由未使用通配符路由。相反,它是 Rails Routing Guide 所指的 Static Segment

您需要改用Wildcard Globbing

get '/blog/*what', to: redirect('http://blog.codeundercover.com/%{what}'), constraints: { what: /.*/ }

【讨论】:

  • @Philip7899 尝试添加正则表达式约束。我已经编辑了我的答案。
  • @WesFoster,为什么正则表达式约束有帮助?
【解决方案2】:
get "/blog(/*what)", to: redirect("http://blog.codeundercover.com/%{what}")

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2017-11-30
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多