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

2022-08-30 14:56:52

我有一个文件夹,我放在我的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/

如何从 Laravel 公用文件夹提供单个 HTML 页面,而不必使用.html扩展名?


答案 1

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

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

关键是您的路由网址与公共文件夹之间没有冲突


答案 2

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

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

<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的索引.php”

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


推荐