我正在尝试在/subdir/subdir/some.cgi
调用以下方法的文件中重定向:
$self->redirect_to("/anothersubdir/some.html");
但是,上面的调用将重定向到/subdir/subdir/some.cgi/anothersubdir/some.html
。那么我如何真正让它重定向到/anothersubdir/some.html
?
我正在尝试在/subdir/subdir/some.cgi
调用以下方法的文件中重定向:
$self->redirect_to("/anothersubdir/some.html");
但是,上面的调用将重定向到/subdir/subdir/some.cgi/anothersubdir/some.html
。那么我如何真正让它重定向到/anothersubdir/some.html
?
显然你必须提供一个绝对路径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);
}