php - Laravel 在生成的 URL 的所有静态文件中响应 404
问题描述
我正在使用在 docker 上运行的 Laravel 7、PHP 7.4,配置如下:
FROM php:7.4-fpm
RUN apt-get update
RUN apt-get install -y autoconf pkg-config libssl-dev
RUN docker-php-ext-install bcmath sockets
RUN apt-get install -y libpq-dev
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/ \
&& ln -s /usr/local/bin/composer.phar /usr/local/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
WORKDIR /website
ENTRYPOINT ["php", "-S", "0.0.0.0:8080", "-t", "/website"]
我将所有资产存储在目录中:public/assets
所有 URL 响应404 Not Found
如下图所示:
我使用以下代码在视图中生成了 URL:
<link rel="shortcut icon" href="{{ url('assets/images/favicon.ico') }}">
- 什么不见了?我应该做一些特定的配置吗?
解决方案
Laravel 应用程序从index.php
公用文件夹内部开始。
您的内置 PHP Server 现在正在监听/website
文件夹,但它必须监听/website/public
文件夹。
现在您可以访问此地址的图像:http://0.0.0.0:8080/public/assets/images/favicon.ico
使用错误的入口点配置。
此配置存在漏洞:
- 使所有应用程序文件夹在生产中部署时都可供公众访问。(app/bootstrap/storage/resources 等文件夹...)
- 你只能使用 /public 前缀访问你的路由,因为你必须去 public/index.php 来启动 Laravel。
因此,您的入口点必须是:
ENTRYPOINT ["php", "-S", "0.0.0.0:8080", "-t", "/website/public"]
推荐阅读
- c# - 将 XML 转换为 JSON 时如何阻止 JsonConvert.SerializeObject 将整数更改为字符串
- c# - Firebase - 验证 api 请求在 .net 5 中具有有效的 id 令牌
- docker - 是否可以在 .yml 文件中定义常量?
- http - 使用 Cache-Control 获取 HTTP 304:无缓存
- wordpress - Wordpress:调用未定义的函数 wp_embed_register_handler()
- java - 在 itext 7 中无法识别字体类型
- python - 通过坐标接近度对 Pandas DataFrame 进行排序
- stripe-payments - 区分 Stripe 退款发票
- javascript - 使用节点 js 从 sftp 下载文件时出错
- java - Spring kafka消费者异常-> org.apache.kafka.common.errors.NotCoordinatorException