我正在开发一个单页应用程序,人们可以在WIXIWIG编辑器中将文件上传到网站,但当您转到资产的公共链接时,您将被定向到由应用程序本身组成的通配符页面,而不是显示资产。
这是我的路线
Route::get('/{any}', 'AppController@index')->where('any', '.*');
有没有一种方法可以将文件存储在本地,而使资产文件和其他类型的文件不转到此路径?
例如,转到像这样的url
/storage/media/38aOL4Pp092SAqNeKIkTuVQ8qRE2RGhfEp2KHSP9.png
不显示此图像,但显示单页面应用程序,它可以很好地加载来自其他网站的图像。
发布于 2018-12-20 04:25:50
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
存在于您的服务器上(并且可由See服务器读取)。
发布于 2018-12-20 04:40:31
在通配符路由之前定义一个带有参数(例如'/files/{fileName}'
)的路由,并使用该路由返回请求的文件。
然后,将通配符路由(它返回带有单页应用程序的索引视图)放在路由定义的底部。这样,只有当路由与上面定义的任何路由不对应时,您才会返回单页应用程序。
总而言之,它应该看起来像这样:
Route::get('files/{fileName}', function ($fileName) {
// return the requested file
});
Route::get('/{any}', 'AppController@index')->where('any', '.*');
https://stackoverflow.com/questions/53858109
复制相似问题