Mojolicious:在/subdir/subdir/some.cgi中重定向不会产生绝对URL

时间:2013-12-08 21:15:53

标签: perl mojolicious mojolicious-lite

我正在尝试重定向文件/subdir/subdir/some.cgi,该文件调用以下方法:

$self->redirect_to("/anothersubdir/some.html");

但是,上述调用将重定向到/subdir/subdir/some.cgi/anothersubdir/some.html。那么我该如何将其重定向到/anothersubdir/some.html

1 个答案:

答案 0 :(得分:1)

显然,您必须提供redirect_to的绝对路径。

为什么?因为redirect_to ...与 url_for相同的参数,它会生成该网址,除非它是绝对的。文档不太明确,但来源是。

因此,您可以构造一个新的Mojo :: URL对象并将其提供给redirect_to

my $url = Mojo::URL->new->base($self->req->url->base->clone)->base->userinfo(undef);
$url = $url->path('/anothersubdir/some.html');
$self->redirect_to( $url );

或复制redirect_to并将其修改为不使用url_for

sub redirect_raw {
  my $self = shift;

  # Don't override 3xx status
  my $res = $self->res;
#~   $res->headers->location($self->url_for(@_)->to_abs);
  $res->headers->location();
  return $self->rendered($res->is_status_class(300) ? () : 302);
}