我想路由过滤访问upploads文件夹中的文件。
<%@ OutputCache Duration="86400" VaryByParam="None" VaryByCustom="ConferenceID" %>
上面的代码适用于链接Route::get('uploads/{class}/{id}/{filename}', array('before' => 'auth', function()
{
return "route works";
}));
,但如果链接指向实际文件uploads/Deviation/1/Laravel%20Cheatsheet
,则laravel似乎绕过路由器。我明白为什么会这样做,但有没有办法弯曲上传文件夹的规则?
答案 0 :(得分:2)
默认情况下,参数值中不允许使用斜杠和点等字符。为了覆盖它,您需要按如下方式定义路径:
Route::get('uploads/{class}/{id}/{filename}', array('before' => 'auth', function()
{
return "route works";
}))->where('filename', '[a-zA-Z0-9\.]+');
请确保您不将文件存储在可公开访问的位置 - 我建议将其存储在存储/ 中的某个位置。
答案 1 :(得分:0)
推荐的Laravel Apache配置是:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
推荐的nginx配置是:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
这两个文件首先优先处理具有该确切文件名的任何文件,如果找不到文件,则回退到Laravel的index.php 。这非常重要 - 您不希望大量的PHP框架涉及提供CSS / JS /图像等静态文件,这对服务器来说是一个沉重的负担。
如果你想在上传前坐Laravel,只需使用不同的URL来引用它们,并在完成你需要做的任何事情之后让Laravel提供文件。
Route::get('not-the-real-uploads/{class}/{id}/{filename}', array('before' => 'auth', function()
{
// something like this
return Response::download('uploads/...', ...);
}));