Ruby 重定向不';在本地主机上应用sinatra

Ruby 重定向不';在本地主机上应用sinatra,ruby,redis,sinatra,Ruby,Redis,Sinatra,这是代码段,它使用参数获取密钥并检查其nil?。有必要避免redis.incr在随机键不可用时创建随机键 问题是我一直被重定向到/。有什么想法吗 get '/:shortcode' do @url = redis.get "links:#{params[:shortcode]}" if !@url.nil? redis.incr "clicks:#{params[:shortcode]}" redirect @url else

这是代码段,它使用参数获取密钥并检查其
nil?
。有必要避免redis.incr在随机键不可用时创建随机键

问题是我一直被重定向到
/
。有什么想法吗

get '/:shortcode' do
    @url = redis.get "links:#{params[:shortcode]}"
    if !@url.nil?
        redis.incr "clicks:#{params[:shortcode]}"
        redirect @url
    else
        redirect '/'
    end
end
编辑: 在这个例子中,我添加了
google.com
,表单由

[2014-01-10 18:37:50] INFO  WEBrick 1.3.1
[2014-01-10 18:37:50] INFO  ruby 2.0.0 (2013-06-27) [x86_64-linux]
== Sinatra/1.4.4 has taken the stage on 4567 for development with backup from WEBrick
[2014-01-10 18:37:50] INFO  WEBrick::HTTPServer#start: pid=13862 port=4567
127.0.0.1 - - [10/Jan/2014 18:37:55] "GET / HTTP/1.1" 200 1312 0.0038
localhost - - [10/Jan/2014:18:37:55 CET] "GET / HTTP/1.1" 200 1312
http://localhost:4567/ -> /
127.0.0.1 - - [10/Jan/2014 18:37:55] "GET /css/main.css HTTP/1.1" 304 - 0.0004
localhost - - [10/Jan/2014:18:37:55 CET] "GET /css/main.css HTTP/1.1" 304 0
http://localhost:4567/ -> /css/main.css
127.0.0.1 - - [10/Jan/2014 18:37:55] "GET /favicon.ico HTTP/1.1" 304 - 0.0010
localhost - - [10/Jan/2014:18:37:55 CET] "GET /favicon.ico HTTP/1.1" 304 0
- -> /favicon.ico
127.0.0.1 - - [10/Jan/2014 18:38:07] "POST / HTTP/1.1" 200 1449 0.0022
localhost - - [10/Jan/2014:18:38:07 CET] "POST / HTTP/1.1" 200 1449
http://localhost:4567/ -> /
127.0.0.1 - - [10/Jan/2014 18:38:14] "GET /br5z9 HTTP/1.1" 302 - 0.0010
localhost - - [10/Jan/2014:18:38:14 CET] "GET /br5z9 HTTP/1.1" 302 0
http://localhost:4567/ -> /br5z9
127.0.0.1 - - [10/Jan/2014 18:38:14] "GET /google.com HTTP/1.1" 302 - 0.0007
localhost - - [10/Jan/2014:18:38:14 CET] "GET /google.com HTTP/1.1" 302 0
http://localhost:4567/ -> /google.com
127.0.0.1 - - [10/Jan/2014 18:38:14] "GET / HTTP/1.1" 200 1312 0.0024
localhost - - [10/Jan/2014:18:38:14 CET] "GET / HTTP/1.1" 200 1312
http://localhost:4567/ -> /
硬编码url的情况:

redirect@url
更改为
redirect'google.com'
给出了这一点

post '/' do
    if params[:url] and not params[:url].empty?
        @shortcode = random_string 5
        redis.multi do
            redis.set "links:#{@shortcode}", params[:url], :nx => true, :ex => 400
            redis.set "clicks:#{@shortcode}", "0", :nx => true, :ex => 400
        end
    end
    erb :index
end

重定向不会将
google.com
识别为外部链接,并尝试路由到
http://localhost:4567/google.com

所以诀窍是使用
http://google.com
。我通过重写提交的字符串解决了这个问题

127.0.0.1 - - [10/Jan/2014 18:55:32] "GET /google.com HTTP/1.1" 302 - 0.0008
localhost - - [10/Jan/2014:18:55:32 CET] "GET /google.com HTTP/1.1" 302 0
http://localhost:4567/ -> /google.com

这是
@url
的示例包含,你能硬编码一个示例url来模拟正确的重定向,然后向我们显示你的其他路由吗
@url
中的内容如果我在那里设置了一个有效的url,你的代码对我来说很好,请进一步检查它。。。如果我使用像
google.com
这样的链接,它就不起作用了。如果我使用“``它可以工作,那么第一件事并不是一个真正的url,这个
将“url:{@url}”
显示为不工作的链接
unless params[:url] =~ /[a-zA-Z]+:\/\/.*/
    params[:url] = "http://#{params[:url]}"
end