Laravel 访问静态文件
我用的是Laravel-4 在当前项目中,我有一个管理页面Laravel 访问静态文件,laravel,laravel-4,Laravel,Laravel 4,我用的是Laravel-4 在当前项目中,我有一个管理页面 Route::get('/admin', function () { return View::make('admin.admin'); })->before('admin.auth'); 此页面包含embbed admin.swf文件 <object type="application/x-shockwave-flash" data="/misc/admin/admin.swf">
Route::get('/admin', function () {
return View::make('admin.admin');
})->before('admin.auth');
此页面包含embbed admin.swf文件
<object type="application/x-shockwave-flash" data="/misc/admin/admin.swf">
<param name="wmode" value="window"/>
<param name="quality" value="high"/>
...
</object>
...
admin.swf文件位于/project root/public/misc/admin/admin.swf
我的管理员路径mysite.com/admin受“admin.auth”筛选器保护。
但每个人都可以通过URL mysite.com/misc/admin/admin.swf访问admin.swf文件
通过“admin.auth”过滤器保护对静态管理员文件的直接访问的最佳方法是什么?我担心这将非常困难,因为让您访问该特定文件的不是Laravel,而是您的Web服务器(apache,nginx?) Laravel创建了一个单独的页面,所有其他对该页面中链接的文件的访问都在这之后完成,作为对Web服务器的请求,因此,如果您向nginx请求一个文件,并且该文件存在,它将直接提供给您的浏览器,否则它将重定向到index.php的调用 您可以告诉nginx禁止访问该文件夹:
location ~ /misc/admin/ {
deny all;
return 404;
}
但是,您必须创建一个路由和一个类来为您的文件提供服务:
Route::get('/admin/download/{fileName}', ['as' => 'admin.download', function ($fileName)
{
return Response::download($fileName);
}])->before('admin.auth');
这个下载方法已经存在于您的Laravel上,因此,它没有经过测试,但应该可以按原样工作
然后,您只需将文件引用为
<object type="application/x-shockwave-flash" data="{{ URL::route('admin.download', ['admin.swf']) }}">
<param name="wmode" value="window"/>
<param name="quality" value="high"/>
</object>
因此,如果您需要更改标题,您可以。1。
我将admin.swf文件放在/project root/private/admin.swf
我认为这比更改web服务器配置以限制公共访问要好
二,。
我沿着路线走
Route::get('/admin.swf', function () {
$file = dirname(app_path()) . "/private/admin.swf";
return Response::make(File::get($file), 200, [
'Content-Type' => 'application/x-shockwave-flash'
]);
})->before('admin.auth');
现在,只有经过授权才能访问该文件
PS使用Response::download的另一个变体
Route::get('/admin.swf', function () {
$file = dirname(app_path()) . "/private/admin.swf";
return Response::download($file, '', [], 'inline');
})->before('static.auth');
我想知道答案。我尝试了这种方法,但我看到的不是flash电影,而是白色块。鼠标右键单击显示flash player上下文菜单“未加载电影”我想响应::下载设置了错误的HTTP头。编辑以显示正确头的位置。我解决了它。:)要设置正确的标题,需要将最后一个参数从“附件”更改为“内联”
Route::get('/admin.swf', function () {
$file = dirname(app_path()) . "/private/admin.swf";
return Response::download($file, '', [], 'inline');
})->before('static.auth');