0

我们正在更新我们的大型网络应用程序并摆脱我们的 URL 同义词系统。例如,虽然我们只为“广告商”使用一个模型,但它使用同义路径别名为“商人”和“卖家”。因此,/merchant/1 和 /seller/1 使用与 ads/1 完全相同的控制器和操作。

我们不再需要此功能,但我们确实需要旧 URL 将用户正确重定向到正确的位置(即正确的控制器操作)。

到目前为止,我已经尝试过:

1)阅读http://guides.rubyonrails.org/routing.html - 这让我尝试以下建议

2) match '/merchants' => redirect('/advertisers') - 尽管语法似乎正确,但这似乎根本不起作用。

3)迭代资源(这会产生大量路线并可能导致不安全感):

ADVERTISER_SYNONOYMS = ['affiliates', 'sellers']

ADVERTISER_SYNONYMS.each do |a|
  resources :advertisers, :path => a,  :as => :advertiser
    resources :other_controller do
      member do
        get :test
        match :generate_test
      end
    end
  end
end

我们在 routes.rb 中使用嵌套资源,因此我正在努力让这些同义词在更复杂的 URL 中被识别。如果有人处理过这个问题或有更优雅的建议,我将不胜感激。

4

1 回答 1

0

有很多方法可以处理这个问题,包括routes.rb您尝试过的附加路由,或者在 Web 服务器级别(如 Apache 或 Nginx)重写。

我喜欢的一种解决方案是rack-rewrite gem;它使路线保持清洁,并且规则是普通的红宝石。它提供了一组用于配置重写和重定向的方法。对于您的情况,我想使用永久重定向。虽然我自己没有测试过,但以下内容可能对您有用:

# Gemfile
gem 'rack-rewrite'

# application.rb
config.middleware.use(Rack::Rewrite) do
  r301 %r{/merchant|seller/(\w+)}, '/advertiser/$1'
end
于 2013-03-21T02:04:00.483 回答