我已将图像上传到S3,现在是html我想简单地检索它们,所以我做了:
<a href="{{ url('/') }}">
<img class="navbar-brand" src="https://s3.eu-west-2.amazonaws.com/production/public/images/logo-small.png">
</a>
然而,图像没有显示,如果我把链接放在浏览器中,我得到:
公共/图像/标志-small.png
而不是实际的图像。
我在这里做错了什么?
我遇到的另一个问题是我所有的css和js都有
{{ asset('path/to/file') }}
在本地工作正常,但在我的网络服务器上没有,因为它为我提供http://domain,而我的服务器有https://
现在,如果我将资产更改为secure_asset,那么它可以在本地运行,但不会因为我的本地构建显然不安全。
我如何解决这两个问题?
答案 0 :(得分:0)
首先,首先,public
目录不需要调用,因为它是服务器的默认根目录,所以你的网址看起来像这样:
/images/logo-small.png
asset()帮助函数,如文档中所述:
使用当前的请求方案为资产生成URL (HTTP或HTTPS)
因此,您可能需要更改请求方案,同时检查.env
文件,APP_URL
字段是使用https设置的。
最后我建议你将s3设置为存储磁盘,这样就可以调用这样的帮助:
use Illuminate\Support\Facades\Storage;
$url = Storage::url('file.jpg');
作为附加信息,过去我的文件不公开时我遇到了s3的问题,所以我无法通过url访问它们,如果设置为public,请检查s3面板中的文件配置也可以在同一个面板上查看其网址。
希望这会对你有所帮助。
答案 1 :(得分:0)
使用HTTP和HTTPS重定向第二个问题的答案。
使用env('APP_ENV')
检查您的工作环境并相应地设置条件。要实现此目的,只需创建一个中间件,并根据环境重定向URL HTTPS or HTTP
。
如果您使用的是Laravel 5+
。
以下是中间件示例:
<?php namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Routing\Middleware;
/**
* Secure
* Redirects any non-secure requests to their secure counterparts.
*
* @param request The request object.
* @param $next The next closure.
* @return redirects to the secure counterpart of the requested uri.
*/
class Secure implements Middleware
{
public function handle($request, Closure $next)
{
$secureEnvs = ['dev', 'qa', 'stage', 'prod'];
$isSecureEnv = in_array(env('APP_ENV'), $secureEnvs);
$requestNotSecure = $request->header('x-forwarded-proto') !== 'https';
// If environment is secure and request is not redirect
if ($isSecureEnv && $requestNotSecure) {
return redirect()->secure($request->getRequestUri());
}
return $next($request);
}
}
在$routeMiddleware
数组中添加此中间件的条目。