我正在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;
}