我们正在更新我们的大型网络应用程序并摆脱我们的URL同义词系统。例如,虽然我们只使用一个模型作为“广告客户”,但使用同义路径将其替换为“商家”和“卖家”。因此,/ merchant / 1和/ seller / 1使用与广告商/ 1相同的控制器和操作。
我们不再需要此功能,但我们确实需要旧的URL才能正确地将用户重定向到正确的位置(即适当的控制器操作)。
到目前为止,我已经尝试过了:
1)阅读http://guides.rubyonrails.org/routing.html - 这引导我尝试以下建议
2)匹配'/ merchants'=>重定向('/ 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中得到识别。如果有人处理这个问题或有更优雅的建议,我将非常感激。
答案 0 :(得分:0)
有很多方法可以解决这个问题,包括你尝试过的routes.rb
中的其他路由,或者在Apache或Nginx等网络服务器级别重写。
我喜欢的一个解决方案是rack-rewrite宝石;它保持路线清洁,规则是纯粹的红宝石。它提供了一组配置重写和重定向的方法。根据您的情况,我想使用永久重定向。虽然我自己没有测试过,但以下内容对您有用:
# Gemfile
gem 'rack-rewrite'
# application.rb
config.middleware.use(Rack::Rewrite) do
r301 %r{/merchant|seller/(\w+)}, '/advertiser/$1'
end