热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LaravelNginx除`/`外所有路由404

是这样的,我完成一个Laravel项目后,打算把它转移到Nginx上,之前图方便,所以在开发环境下都是php-Slocalhost:1234来启动HTTP服务器,并没有在Nginx下开发,服务器是Ubuntu14.10。把整个项目复...
是这样的,我完成一个 Laravel 项目后,打算把它转移到 Nginx 上,之前图方便,所以在开发环境下都是 php -S localhost:1234 来启动 HTTP 服务器,并没有在 Nginx 下开发,服务器是 Ubuntu 14.10。

把整个项目复制到 /usr/share/nginx/html 后,修改 app/storage 权限为 777,然后浏览器访问 / 可以访问,但除了 / 路由其他路由全部返回 404,比如 /home 返回 404 NOT FOUND,而在开发时是没有这些问题的。数据库这些都没问题,因为开发是在同一台机上。

下面是我的 Nginx 配置文件:

configserver {
    listen 80 default_server;
    listen [::]:80 default_server ipv6Only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ /index.php;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

我在 stackoverflow 看到了同样的问题,于是试着修改我的 Nginx 配置文件添加上:

configtry_files $uri $uri/ @rewrite;

location @rewrite {
    rewrite ^/(.*)$ /index.php?_url=/$1;
}

还是 404,未能解决。

后来我又在 Nginx 根目录下新建了一个 Laravel 项目,修改 app/storage 权限后访问根路由正常,而访问其他自定义路由同样 404,比如:

app/route.php

phpRoute::get('home', function()
{
    return View::make('hello');
});

水平实在菜,真是无计可施了,请高手解疑,非常感谢。

回复内容:

是这样的,我完成一个 Laravel 项目后,打算把它转移到 Nginx 上,之前图方便,所以在开发环境下都是 php -S localhost:1234 来启动 HTTP 服务器,并没有在 Nginx 下开发,服务器是 Ubuntu 14.10。

把整个项目复制到 /usr/share/nginx/html 后,修改 app/storage 权限为 777,然后浏览器访问 / 可以访问,但除了 / 路由其他路由全部返回 404,比如 /home 返回 404 NOT FOUND,而在开发时是没有这些问题的。数据库这些都没问题,因为开发是在同一台机上。

下面是我的 Nginx 配置文件:

configserver {
    listen 80 default_server;
    listen [::]:80 default_server ipv6Only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ /index.php;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

我在 stackoverflow 看到了同样的问题,于是试着修改我的 Nginx 配置文件添加上:

configtry_files $uri $uri/ @rewrite;

location @rewrite {
    rewrite ^/(.*)$ /index.php?_url=/$1;
}

还是 404,未能解决。

后来我又在 Nginx 根目录下新建了一个 Laravel 项目,修改 app/storage 权限后访问根路由正常,而访问其他自定义路由同样 404,比如:

app/route.php

phpRoute::get('home', function()
{
    return View::make('hello');
});

水平实在菜,真是无计可施了,请高手解疑,非常感谢。

php -S 有一个致命问题就是路由中的 'home' 必须写成 '/home' 才能工作。

详见 http://lvwenhan.com/php/406.html

不过你这个问题看起来是定向入口文件的问题,就是说没有把所有非静态请求都发送给入口文件 index.php。最后别忘了把根目录指向 laravel/public

Laravel 是什么我不知道,不过看起来它不是 WordPress 那种直接解析 URI 的,而是使用 PATH_INFO 来决定展现什么内容。

你把请求 rewrite 到 PHP 入口文件上试试?像这样子:

location / {
    rewrite ^/(/.*)?$ /index.php$1 last;
}

location = / {
    index index.php;
}

location ~ (.+\.php\d?)($|/) {
    fastcgi_pass    unix:/run/php-fpm/php-fpm.sock;
    fastcgi_index   index.php;
    set $script $request_filename;
    if ($request_filename ~ ^(.+\.php\d?)(/.*)$){
            set $script $1;
            set $pathinfo   $2;
    }
    fastcgi_param   PATH_INFO   $pathinfo if_not_empty;
    fastcgi_param   SCRIPT_FILENAME $script;
    include     fastcgi_params;
}

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

详见Laravel官方文档:
http://laravel.com/docs/5.0/installation#pretty-urls

location / {
    try_files $uri $uri/ /index.php;
}
加一个 root 试试

location / {
     root /var/www/
     try_files $uri $uri/ /index.php;
}

我用的iis8 Win8 遇到这个404 的问题了,给iis装了Url Rewrite组件导入 htacss 文件后就好了

try_files $uri =404;
把这行注释掉呢?
http://www.yimiju.com/articles/593.html

推荐阅读
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
author-avatar
骨Zi骄傲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有