laravel 404错误返回丢失图像的整个页面


laravel 404 error returning entire page for missing images

我正在laravel 4.2中开发一个网站,我使用了一个自定义的404页面来显示"找不到页面"。一切都很好,但如果有任何资产没有找到,比如图像或js文件,Chrome控制台会向我显示整个404页面。对于每一个丢失的资产,都会加载整个404页面,这是非常重的,并且不是必需的。

我该怎么做才能为找不到的资产而不是整个404页面返回一条简单的消息?

公用文件夹中的.htaccess被配置为允许Laravel处理所有不是文件或目录的内容。对于public的子目录,比如public/css,一个简单的方法就是将一个.htaccess文件放在这个目录中,并禁用Larvel对该文件夹的路由:

public/css/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine Off
</IfModule>

然后,当您尝试访问不存在的文件时,您将获得Web服务器的默认未找到页面。

旁注:当然,你也可以使用Laravel和一些程序逻辑来实现这一点,但这似乎是最干净的方法,因为它甚至不启动Laravel,从而节省了响应时间和服务器资源。

此外,您可能应该尽最大努力只请求实际存在的文件,以避免404。

我找到了解决方案。以下nginx设置工作并显示nginx 404的文件找不到和自定义页面的url找不到。

rewrite_log on;
try_files $uri $uri/ @rewrite; 
location @rewrite {
    rewrite ^/(.*)$ /index.php?_url=/$1;
}       
error_page  404              /404.html;
location = /404.html {
    root   /usr/share/nginx/html;
}