我在EC2实例上克隆了我的laravel项目(类型为ubuntu 16.04)
之后我运行了composer install
命令
我根据我当地的机器改变了/etc/nginx/site-available/default
配置
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html/myproject/public;
charset utf-8;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name myServerIpAddress;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
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;
}
}
现在当我打开我的服务器IP地址时,它会正确显示我的/
路由,但当我尝试打开/login
或/register
时,它显示我找不到404
我的nginx版本是(1.10.0) 我的php版本是(7.0.18)
我还检查了日志文件,但它没有显示任何错误
谢谢
答案 0 :(得分:2)
根据您当前的配置,在请求/login
时,nginx将尝试查看名为/var/www/html/myproject/public/login
的文件是否存在,然后是否存在名为/var/www/html/myproject/public/login/
的文件夹,然后返回错误404如果它们都不存在。
这不是您所期望的,因为您没有创建名为login
的文件,您只是在Laravel的路由器中创建了一条路由。因此,您必须以每次请求此 vhost 时调用公共目录的index.php
文件的方式配置nginx,然后框架将能够比较URL请求的目标是您注册的路由。
As documented on Laravel's website,您应该编辑配置以添加以下位置块,以便将所有请求(除了静态资源除外)重定向到index.php
,原始查询作为参数:
location / {
try_files $uri $uri/ /index.php?$query_string;
}