首页 > 解决方案 > 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') }}">

标签: phplaravel-7

解决方案


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"]


推荐阅读