【问题标题】:Sinatra routes with + character带有 + 字符的 Sinatra 路由
【发布时间】:2012-01-18 15:44:57
【问题描述】:

我最近重命名了我(由 sinatra 支持的)网站上的一些页面。我正在使用以下路线将旧名称重定向到新名称,我已将其放在任何其他名称之前:

##
# Renamed pages
#
get '/venue' do redirect '/the+wedding/reception'; end
get '/accommodation' do redirect '/out+of+town+info/accommodation'; end
get '/things+to+do' do redirect '/out+of+town+info/things+to+do'; end

前两个工作正常,但第三个结果是 404。这第三个路由中的 + 有什么特别之处吗?我在文档中找不到任何有用的东西,而且我似乎无法以一种使路线工作的方式逃避它们。

我一直在用curl测试,前两个按预期使用304,第三个显示正常的404页面。

我使用的是 Debian 中打包的 sinatra 1.2.6。

【问题讨论】:

  • 您使用的是哪个版本的 Sinatra?
  • 感谢 Holger,我已经更新了问题:1.2.6。我会试试 gem 并更新一下。
  • 在 1.3.2 上按预期工作。我将切换到我服务器上的 gem(下次检查错误)。谢谢。
  • :) 我曾经遇到过类似的错误,这导致康斯坦丁烦扰他,谢天谢地,他在 1.3.0 中修复了它 :) 供将来参考,它已在 github.com/sinatra/sinatra/pull/271 中修复
  • @hmans,这是表单提交中空格的编码方式,而不是它在 URL 路径中的编码方式(即 %20 - 请参阅 stackoverflow.com/questions/1634271/…)。它受到明确支持,在 URL 中未转义,并且是经过深思熟虑的选择。

标签: ruby http-headers routes sinatra


【解决方案1】:

这个问题是由 Sinatra 的请求解析中的一个怪癖引起的。它由 Konstantin Haase 在 Sinatra 1.3.0 中通过https://github.com/sinatra/sinatra/pull/271 修复。

因此,一旦您将 Sinatra 更新为 >= 1.3.0,请求解析就会按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-13
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2011-01-16
    • 2017-10-15
    • 1970-01-01
    相关资源
    最近更新 更多