【问题标题】:Make 301-redirects administratable by the user in Rails?让 Rails 中的用户可以管理 301 重定向?
【发布时间】:2015-10-26 08:41:31
【问题描述】:

我们目前正在将一个更大的网站从 PHP(Magento 有一个非常详尽的论坛)重新启动为 Rails 应用程序,同时保留论坛。

在此过程中,我们会将大量内容迁移到新 URL,这意味着我们将不得不对其中的很多内容进行 301 重定向。

现在我们都知道 Apache/NGINX 重写了。我还为 RACK 找到了 https://github.com/jtrupiano/rack-rewrite

但是有没有一种好方法可以让我们的用户使用 Rails 管理 301 重定向?(我基本上是在寻找 GEM 或 RACK 应用程序,我们的用户可以在其中登录,然后查看和编辑现有的重定向)。

感谢您的帮助。

【问题讨论】:

  • 是否可以使用 Rails 路由模式捕获这些遗留 URL?你能提供这方面的例子吗?
  • 当然。例如/some-old-category/some-link/some-new-category/some-other-link 甚至 /old-category/*/new-category/*。但我希望让它们远离我的路线并单独拥有它们。
  • 那不是“确定”,那是“否”,我看不到只捕获旧 URL 而没有新 URL 的模式。
  • ...如果我能举个例子的话,关于你的问题“当然”。
  • 很公平。我的意思是问是否可以仅通过模式将新 URL 与旧 URL 分开。它似乎没有。

标签: ruby-on-rails .htaccess redirect rack


【解决方案1】:

您可以将所有重定向存储在具有“from”和“to”属性的模型中。然后,您可以根据需要从管理区域管理此重定向。

然后,在您的 ApplicationController 中,您可以将您的操作包装在一个环绕过滤器中,如 it says here

around_filter :catch_not_found

private

def catch_not_found
  yield
rescue ActiveRecord::RecordNotFound
  redirect = Redirect.where(from: request.original_fullpath).first
  redirect_to "#{request.base_url}#{redirect.to}" if redirect
end

【讨论】:

  • 这是一种方式,你是对的。我希望我可以将它排除在我的控制器之外,并通过路由来完成。另外:我的应用程序没有管理区域(是一个单独的应用程序)。因此,我希望 GEM/RACK-app 附带一个准系统管理后端。
猜你喜欢
  • 2011-11-01
  • 2022-06-15
  • 2011-11-17
  • 2012-04-20
  • 2016-03-14
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
相关资源
最近更新 更多