如何路由到 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 中的静态文件夹的主要内容,如果未能解决你的问题,请参考以下文章