Laravel路由不起作用只有root路由正常工作

时间:2017-05-30 15:48:57

标签: php ubuntu nginx amazon-ec2

我在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)

我还检查了日志文件,但它没有显示任何错误

谢谢

1 个答案:

答案 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;
}