我正在开发一个单页面应用程序,人们可以在WIXIWIG编辑器中将文件上传到网站,但是当您转到资产的公共链接时,您将定向到由应用程序本身组成的通配符页面,而不是显示资产。
这是我的路线
Route::get('/{any}', 'AppController@index')->where('any', '.*');
有没有一种方法可以在本地存储文件,并且资产文件和其他类型的文件不采用这种方式?
例如转到这样的网址
/storage/media/38aOL4Pp092SAqNeKIkTuVQ8qRE2RGhfEp2KHSP9.png
不显示此图像,而是显示单页应用程序,它将很好地从其他网站加载图像。
答案 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/storage
到storage/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', '.*');