1

/subdir/subdir/some.cgi次のメソッドを呼び出すファイルにリダイレクトしようとしています:

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

ただし、上記の呼び出しは/subdir/subdir/some.cgi/anothersubdir/some.html代わりににリダイレクトされます。では、実際にリダイレクトするにはどうすればよい/anothersubdir/some.htmlですか?

4

1 に答える 1

1

への絶対パスを指定する必要があるようですredirect_to

なんで ?redirect_toは... url_forと同じ引数を 言うため、絶対的なものでない限り、その URL を生成します。ドキュメントはあまり明示的ではありませんが、ソースはそうです。

したがって、新しい 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);
}
于 2013-12-09T03:08:11.080 に答える