我已经使用Ubuntu在Nginx上安装了laravel。到目前为止,除了一个问题外,一切都很好。当用户插入任何类似domain.com/user/whatever.php nginx响应的网址时,会自动插入404错误页面,而不是显示laravel 404页面。
我的nginx配置中缺少什么?
我的nginx配置文件:
server {
listen 80;
server_name ip domainFotcom wwwDotdomainDotcom;
return 301 https://domainDotcom$request_uri;
}
server {
listen 443 ssl http2;
server_name ip wwwDotdomainDotcom;
return 301 $scheme://domainDotcom$request_uri;
}
# Default server configuration
#
server {
#listen 80 default_server;
#server_name ip domainDotcom wwwDotdomainDotcom;
#listen [::]:80 default_server;
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
root /var/www/domain/public;
# Add indexDotphp to the list if you are using PHP
index indexDotphp indexDothtml indexDothtm indexDotnginx-debianDOthtml;
server_name domainDotcom;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri $uri/ /indexDotphp?$query_string;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
location ~ /.well-known {
allow all;
}
}
答案 0 :(得分:2)
据我了解,如果文件以“.php”结尾,nginx会尝试将其发送到php引擎。然后,如果文件不存在,php引擎会在nginx级别抛出404。您应该再次捕获并将其重定向到php引擎:
server {
listen 80;
listen [::]:80;
root /var/www/path/public;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name domain.com www.domain.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri @missing;
# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi.conf;
}
location @missing {
rewrite ^ /error/404 break;
try_files $uri $uri/ /index.php?$query_string;
}
}
答案 1 :(得分:0)
使用Laravel文档中的漂亮网址nginx配置:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
来源:https://laravel.com/docs/5.4/installation#pretty-urls
您还需要确保在resources/views/errors/404.blade.php
下设置了404错误页面,如文档中所述:
Laravel可以轻松显示各种HTTP状态代码的自定义错误页面。例如,如果要自定义404 HTTP状态代码的错误页面,请创建resources / views / errors / 404.blade.php。此文件将在您的应用程序生成的所有404错误中提供。
在此处进一步阅读:https://laravel.com/docs/5.4/errors#http-exceptions
答案 2 :(得分:0)
替换此
try_files $uri $uri/ /index.php?$query_string;
使用
try_files $uri $uri/ /index.php$is_args$args;
在运行之后
sudo service nginx restart