路由到 Mojo 中的静态文件

KoV*_*dim 5 perl mojolicious

我有基于 mojolicious 的小应用程序。我在公共目录中有 index.html。当用户要求'/'时,我想有到这个文件的路由。

我写了两个解决方案,但我不喜欢它们。

第一个解决方案 - 添加简单的控制器。

sub stratup {
  //...
  $r->get('/')->to('general#index_html');
  //...
}

package MyPackage::General;

use Mojo::Base 'Mojolicious::Controller';

use strict;
use warnings;

sub index_html {
    my $self = shift;
    $self->render_static('index.html');
    return;
}

1;
Run Code Online (Sandbox Code Playgroud)

第二种解决方案 - 添加钩子

sub startup {
    my $self = shift;

    $self->hook(before_dispatch => sub {
            my $self = shift;
            if ($self->req->url eq '/') {
                $self->req->url( Mojo::URL->new('/index.html') );
            }
        });
Run Code Online (Sandbox Code Playgroud)

我想要的是:

$r->get('/')->to('/index.html');
Run Code Online (Sandbox Code Playgroud)

或类似的东西。

PS 我知道,比通常的 nginx/apache 这样做,但我使用 morbo 来运行代码。

Joh*_*ick 0

到目前为止,最简单的方法是

get "/" => "index";

  • 第二种方法还存在一个非常严重的安全漏洞,因为您没有防止路径遍历。像(例如) `../../../../../../../../../../etc/passwd` 这样的文件名会提供您不提供的内容想要提供服务,不是因为 Mojolicious 的任何缺陷,而是因为操作系统会按照您的要求执行操作。 (2认同)