如何路由到Laravel中的静态文件夹


How to route to a static folder in Laravel

我在Laravel站点的/public文件夹中放置了一个文件夹。路径是:

/public/test

"test"文件夹有一个名为index.html的文件,它只是我想从公共文件夹加载的一个静态资源(我不想在框架内为此创建一个视图——太多了,无法解释)。

我做了一条这样的路线:

Route::get('/test', function() {
  return File::get(public_path() . '/test/index.html');
});

我无法让它发挥作用。我刚从Chrome收到一个错误,说这个页面有一个重定向循环。

我可以通过以下方式访问:

http://www.example.com/test/index.html

但是我不能在任何地方使用.html扩展名。文件必须显示为:

http://www.example.com/test/

如何在不使用.HTML扩展名的情况下提供Laravel公用文件夹中的单个HTML页面?

以前曾面临过这个问题,作为一个肮脏的小技巧,你可以将测试文件夹重命名为其他文件,然后更新

return File::get(public_path() . '/to new folder name/index.html');

关键是你的路由url和你在公共中的文件夹之间没有冲突

对于静态文件,我认为通过Laravel为其提供服务是在浪费资源。

在过去尝试访问public中的文件/文件夹时,会创建无限重定向,但我认为Laravel附带的最新.htaccess解决了这些问题(至少在Apache上)。看起来像这个

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    RewriteEngine On
    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

上面写着:"如果请求不是针对现有文件夹的,请去掉后面的斜杠(如果有的话)。"。如果请求不是针对现有文件夹或现有文件,请加载Laravel的index.php'

然后,我在子目录中添加了一个.htaccess文件,以确保设置了DirectoryIndex,以便在默认情况下,在请求目录时加载index.html。

使用:

return Redirect::to('/test/index');

可以在路由文件的函数中,也可以在控制器中。