【问题标题】:Redirect from current page to a new page从当前页面重定向到新页面
【发布时间】:2011-12-18 09:08:19
【问题描述】:

我遇到了一些 Ruby CGI 问题。

我有一个混合了 HTML 和 Ruby 的主页 (index.cgi),其中有一个登录表单。

点击提交按钮后,POST 的操作是同一页面 (index.cgi),此时我检查以确保用户已将数据输入到正确的字段中。

我有一个计数器,每当一个字段为空时,计数器就会增加 1。如果此计数器为 0,我想将当前加载的页面更改为 contents.html 之类的内容。

有了这个,我有:

if ( errorCount > 0 )
  do nothing
else
  ....
end

我需要把什么放在我有 .... 的地方?


很遗憾,我不能使用任何框架,因为这是用于大学课程的,所以必须使用基础 Ruby。

至于按照您的建议使用 CGI#header 方法,我已尝试使用此方法,但它不适合我。

如前所述,我的页面是 index.cgi。这是由使用“here doc”语句的 Ruby 和 HTML 混合而成的。

在我的代码页顶部有我的 shebang 行,后面是 HTML 标题语句。

然后我执行 CGI 表单验证部分,在此我尝试执行以下操作: print this.cgi( { 'Status' => '302 Moved', 'location' => '{http://localhost:10000/contents.html' })

所发生的只是这一行打印在浏览器窗口的顶部,在我的 index.cgi 页面上方。

我希望这是有道理的。

【问题讨论】:

  • 没有看到源代码,我们帮助您的能力是有限的。
  • 您必须在任何其他输出之前发送标头,否则 CGI 将为您创建默认标头。我用一个非常简单的例子的链接更新了我的答案。
  • Gioele,非常感谢您的帮助。我犯了一个愚蠢的错误,将“ puts "Content-Type: text/html\n\n" 放在我的文件顶部。我现在将它移到了我的表单验证脚本(它有重定向语句)下面,它可以工作了。

标签: ruby forms redirect cgi


【解决方案1】:

要将浏览器重定向到另一个 URL,您必须输出包含 Location: /foo/bar 标头的 30X HTTP 响应。您可以使用CGI#header 方法来做到这一点。

我建议您使用Sinatra 这样的简单框架,或者至少将您的脚本编写为与Rack 兼容的应用程序,而不是处理这些您尚未掌握的细节。

如果你真的需要使用裸 CGI 类,看看这个简单的例子:https://github.com/tdtds/amazon-auth-proxy/blob/master/amazon-auth-proxy.cgi。

【讨论】:

  • OP 更新了他的问题,提供了更多信息以响应您的回答。
  • 昨天我曾多次尝试使用“添加评论”框执行此操作,但都没有成功。
  • 新用户在获得一些声望点之前不能发表评论。但是,您可以并且应该接受在帮助您解决问题的答案上使用“接受”按钮;)
猜你喜欢
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多