具有资产路线的Laravel单页应用程序

时间:2018-12-19 19:37:33

标签: laravel

我正在开发一个单页面应用程序,人们可以在WIX​​IWIG编辑器中将文件上传到网站,但是当您转到资产的公共链接时,您将定向到由应用程序本身组成的通配符页面,而不是显示资产。

这是我的路线

Route::get('/{any}', 'AppController@index')->where('any', '.*');

有没有一种方法可以在本地存储文件,并且资产文件和其他类型的文件不采用这种方式?

例如转到这样的网址

/storage/media/38aOL4Pp092SAqNeKIkTuVQ8qRE2RGhfEp2KHSP9.png

不显示此图像,而是显示单页应用程序,它将很好地从其他网站加载图像。

2 个答案:

答案 0 :(得分:0)

Laravel应该已经在其自身的路由上确定了真实的现存文件的优先级。在默认的Apache配置中:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

或者在nginx中:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

这两个配置基本上都说“尝试查找真实文件,并在没有找到任何内容的情况下依靠index.php ”。

除非您对这些配置做了一些奇怪的事情,否则这意味着/storage/media/38aOL4Pp092SAqNeKIkTuVQ8qRE2RGhfEp2KHSP9.png不是该文件的正确路径。

请务必注意,您应用的storage目录不可公开访问(如果您已正确配置内容)。请参阅the public disk上的Laravel文档,并确保您具有从public/storagestorage/app/public的链接,并且服务器上存在storage/app/public/media/38aOL4Pp092SAqNeKIkTuVQ8qRE2RGhfEp2KHSP9.png(并且可由网络服务器读取) )。

答案 1 :(得分:0)

在通配符路由之前使用参数(例如'/files/{fileName}')定义路由,并使用该路由返回请求的文件。

然后,将通配符路由(使用单页应用返回索引视图)放在路由定义的底部。这样,仅当路由与上面定义的路由不匹配时,您才会返回单页应用。

总而言之,它应该看起来像这样:

Route::get('files/{fileName}', function ($fileName) {
    // return the requested file
});

Route::get('/{any}', 'AppController@index')->where('any', '.*');