自定义404路由不匹配网站根目录

时间:2014-04-24 07:49:16

标签: perl url-routing mojolicious

我为我的Mojolicious应用程序定义了一些路由,以及一条全能的404路线:

$r->any('*')->to(cb => sub {
    my $self = shift;
    $self->render(text => '404 Not Found');
    $self->rendered(404);
});

404路线正常:

$ ./bin/myapp.pl -m production get /no_such_url
404 Not Found

但是我也希望404路线与网站根目录匹配,而且我总是得到一些默认的Mojolicious 404,即使在生产模式下:

$ ./bin/myapp.pl -m production get /
<!DOCTYPE html>
<html>
  <head><title>Page not found</title></head>
…

我需要做什么才能在/上提供简单的404回调?

1 个答案:

答案 0 :(得分:4)

你是正确的any '*'将无法捕获主索引/。这似乎是一个例外。有两个简单的解决方案:

您只需为路线创建别名即可。请注意我们在设置渲染文本之前如何设置渲染代码:

use Mojolicious::Lite;

sub my404 {
    my $self = shift;
    $self->rendered(404);
    $self->render(text => '404 any *');

}

any '*' => \&my404;
any '/' => \&my404;

app->start;

您也可以覆盖Rendering exception and not found pages中记录的默认404未找到模板:

use Mojolicious::Lite;

app->start;

__DATA__

@@ not_found.development.html.ep
404 default template