3

我在 context 下将 Rails 应用程序部署到我的服务器scala_tour。转到 URL 时,一切正常。但是,如果 url 被编码为scala%5ftour(顺便说一下,这就是 SO 所做的),我会从 Rails 和/或Passenger 那里得到一个错误。

乘客似乎可以识别 URL 并将其交给我的 Rails 应用程序,但 Rails 应用程序抱怨:

ActionController::RoutingError (No route matches "/scala%5Ftour" with {:method=>:get}):

这很奇怪。

除了在 Apache 中进行重定向并将我的应用程序部署到不同的上下文之外,我该如何处理呢?

版本

# yum list installed | grep http
httpd.i386                               2.2.10-2.el5.eapps     installed    
# yum list installed | grep passen
passenger.i386                           2.2.2-1eapps           installed 
# gem list | grep rails
rails (2.3.2, 2.2.2)
# ruby -v
ruby 1.8.6 (2008-06-20 patchlevel 230) [i386-linux]

路线.rb

ActionController::Routing::Routes.draw do |map|
  map.resources :wiki_pages do |wiki_map|
    wiki_map.history 'history', :controller => 'wiki_pages', :action => 'history', :method => 'GET'
    wiki_map.version 'version/:sha1', :controller => 'wiki_pages', :action => 'version', :method => 'GET'
  end
  map.history '/history.:format', :controller => 'wiki_pages', :action => 'wiki_history', :method => 'get'
  map.resources :diagrams, :only => [:index,:new,:destroy,:edit,:show]
  map.logout '/logout', :controller => 'sessions', :action => 'destroy' 
  map.login '/login', :controller => 'sessions', :action => 'new'
  map.resources :users
  map.resource :session
  map.root :controller => 'wiki_pages', :action => 'show', :id => 'MainPage'
end

阿帕奇会议

RailsBaseURI /scala_tour
PassengerPoolIdleTime 5
4

2 回答 2

1

有两件事立即浮现在脑海中,您可以在 apache 中使用mod_rewrite来规范化 URL,或者您可以使用 Rack Middleware 来重写它。是一个可能会为您解决问题的宝石。

于 2009-10-13T17:39:33.067 回答
0

你使用的是什么浏览器?前几天在 IE/Safari 中遇到了这个问题:http ://wantnotechno.wordpress.com/2009/11/10/ie-gotcha-1-uri-underscores/ 。显然,由于旧浏览器的旧规范,URI 中的下划线存在一些问题。

于 2009-11-23T17:07:29.473 回答