首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Laravel 上传到lnmp环境不能用 您了解pathinfo吗

Laravel 上传到lnmp环境不能用 您了解pathinfo吗

作者头像
切图仔
发布于 2022-09-08 19:05:42
发布于 2022-09-08 19:05:42
7750
举报
文章被收录于专栏:生如夏花绚烂生如夏花绚烂

在nginx下是不支持pathinfo的,但是apache支持pathinfo。 pathinfo是什么? 首先我们在nginx的html目录下新键1.php文件,打印$_SERVER

代码语言:javascript
复制
<?php
echo "<pre>";
print_r($_SERVER);

尝试在地址栏输入如下参数

结果返回404

同样的代码在apache下测试

没有报错 并且页面多了PATH_INFO的字段 值为 url地址后面的参数 a/b/c 这就是pathinfo 一些框架中他的地址栏格式为 index.php/Home/Index/goods/1....这种格式在apache中可以正常解析,但在nginx中是不支持的,也就是你的框架项目直接拿到nginx上是跑不起的。 解决办法如下

代码语言:javascript
复制
//基础配置
location ~ \.php$ { 
           root           html;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  /$DOCUMENT_ROOT$fastcgi_script_name;
           include        fastcgi_params;
}
//修改后的配置
location ~ \.php(.*)$ {
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  /$DOCUMENT_ROOT$fastcgi_script_name;
           fastcgi_param  PATH_INFO $1;
           include        fastcgi_params;
       }

通过正则反向引用将.php后面的参数传递给pathinfo 浏览器测试传入参数 1.php/a/b 页面生成PATH_INFO字段

此时解决Nginx不支持pathinfo的问题。

但有些框架他的地址栏格式是这样的 域名+a/b/c,域名后面没有index.php 如dian.com/show/eic 这时候要使你的项目在nginx上运行就要通过url地址重写解决问题

代码语言:javascript
复制
 location / {
      root html/daikuan/public;
      index index.php index.html ;
      //添加url重写
      if ( !-e $request_filename) {
           rewrite (.*)$ /index.php/$1;
      }

但是这种方式一直导致 500 Internal Server Error 不知道什么原因,不过在nginx中还可以通过try_files解决上述问题

代码语言:javascript
复制
location / {
            root html/daikuan/public;
            index index.php index.html ;
            //tryfile
           try_files $uri /index.php?$uri;
        }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档