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

Posted

技术标签:

【中文标题】如何路由到 Laravel 中的静态文件夹【英文标题】:How to route to a static folder in Laravel 【发布时间】:2015-05-26 21:31:27 【问题描述】:

我有一个文件夹放在我的 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 页面?

【问题讨论】:

【参考方案1】:

用途:

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

在你的路由文件或控制器内部的函数中。

【讨论】:

那行不通。我仍然收到重定向循环错误。【参考方案2】:

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

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

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

【讨论】:

这行得通。正如您所说,关键是确保您的路由路径和公共目录中的路径(文件夹)各自具有不同的名称。感谢您的帮助! 顺便说一句,您是如何管理测试目录中的资产的?【参考方案3】:

对于静态文件,我认为您正在浪费通过 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。

【讨论】:

一个用例是:保护静态内容免受未经身份验证的用户的访问。

以上是关于如何路由到 Laravel 中的静态文件夹的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Laravel 4 中混合静态路由和动态路由?

ExpressJS:如何忽略路由中的公共静态文件?

phpstudy安装laravel怎么配置伪静态

laravel中的动态网址?

使用 ASP.NET 路由来提供静态文件

在laravel5.8中集成swoole组件----用协程实现的服务端和客户端---静态文件如何部署