Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 访问静态文件_Laravel_Laravel 4 - Fatal编程技术网

Laravel 访问静态文件

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">

我用的是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">
            <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');