Thinkphp在Nginx上的配置

本文详细介绍了如何在Nginx服务器上正确配置PathInfo以支持ThinkPHP框架,包括解决404错误的方法及如何实现路由重定向和隐藏index.php。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Thinkphp配置文件:如果在Nginx服务器上,最好还是把  'URL_MODEL' =>      2, 设置上,不然出现的问题奇奇怪怪。


最新更新,在看Nginx文档的时候,发现它自带有pathinfo的处理方法:

syntax:fastcgi_split_path_info regex;
default:
context:location

fastcgi_split_path_info regex 定义一个正则表达式,可以抓取一个值给变量$fastcgi_path_info,正则表达式一共可以抓取2个值,第一个是$fastcgi_script_name。第二个是$fastcgi_path_info 。

 location ~ \.php/?.*$ {
       fastcgi_pass   127.0.0.1:9000;
       fastcgi_index  index.php;
  
       fastcgi_split_path_info ^(.+\.php)(/.*)$;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       include        /usr/local/nginx/conf/fastcgi_params;
  }

这样就可以轻松的解决thinkphp的pathinfo问题了。如果你项目还需要隐藏index.php或者使用了路由。在执行PHP文件的location前边加上一个location重写:

  #rewrite
  location  /blogforit/ {
      index index.php;
      if (!-e $request_filename) {
            rewrite ^/blogforit/(.*)$ /blogforit/index.php?s=$1 last;
      }
      break;
  }



1.由于Nginx默认不支持pathinfo模式,如果你的网站路径如:http://192.168.10.212/AndyCMS/index.php/Section/view/id/3以斜杠划分,则Nginx默认把其当为一个目录,就会出现一个404错误,找不到文件,具体可以查看error日志。

解决方法:以下是我的最简单的配置文件。

  location ~ \.php/?.*$ {
          set $path_info "";
          set $real_script_name $fastcgi_script_name;
          if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
              set $real_script_name $1;   //将真的脚本名即index.php赋值给变量
              set $path_info $2;         //得到后面的pathinfo路径如/Section/view/id/3       
          }
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_NAME $real_script_name;
            fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
            fastcgi_param PATH_INFO $path_info;
            include /usr/local/nginx/conf/fastcgi_params;
    }


2.我们使用了Thinkphp的路由转向和隐藏index.php,需要修改如下nginx配置:

假如我的项目目录是:/usr/local/nginx/html/blogforit 。注(我的访问模式都是从localhost访问的,如:localhost/blogforit,具体如果有域名访问的具体配置)

我们就需要修改nginx配置文件:

  location /blogforit/ {
      index index.php;
      if (!-e $request_filename) {
          rewrite /blogforit/(.*) /blogforit/index.php/$1 last;
      }
      break;
  }

  location ~ \.php/?.*$ {
          set $path_info "";
          set $real_script_name $fastcgi_script_name;
          if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
              set $real_script_name $1;   //将真的脚本名即index.php赋值给变量
              set $path_info $2;         //得到后面的pathinfo路径如/Section/view/id/3       
          }
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_NAME $real_script_name;
            fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
            fastcgi_param PATH_INFO $path_info;
            include /usr/local/nginx/conf/fastcgi_params;
   }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值