当前位置: 首页 > article >正文

ThinkPHP 3.2 + Nginx 页面404问题

学习公司Callout项目时,发现公司项目所使用的TP版本是3.2,所以才可以使用例如,C,M,A等方法

因此我用phpEnv搭建了一个项目,域名为thinkphp,所选根目录如下

我打开网页,访问 thinkphp/ 和 thinkphp/index.php/Home/Index,有正常跳转页面,

实际访问的是application/Home/Controller/IndexController.class.php 的默认index 方法

根据php的url规则

thinkphp/index.php/Home/Index/index => 访问IndexController.class.php的index方法 (默认)

thinkphp/index.php/Home/Index/test => 访问IndexController.class.php的test方法

结果页面实际显示404,无法访问到控制器

这个原因如下:

引入

在使用Thinkphp的时候,项目在本地可以正常使用;但迁移到nginx后,会出现页面只能访问首页,其它页面出现404错误的问题。

这是因为TP默认采用的是pathinfo的URL访问模式(TP的URL访问模式可在手册中了解),而Nginx默认是没有开启pathinfo模式的,PHP默认也没有开启pathinfo的配置,所以访问时会出现错误。

pathinfo模式是怎样的模式呢?

例如:http://localhost/goodsLevel/index.php/Home/Index/index.html

上面的url就是采用pathinfo模式,特点如下:

1、路径中携带了入口文件index.php

2、在入口文件后跟随路径。格式一般为index.php/模块/控制器/方法/参数等

404页面出现原由

了解pathinfo模式后,我们就知道为什么Nginx环境下访问TP页面时出现404页面了。

因为按照常理来说,index.php后面跟随着路径,那么index.php就相当于一个文件夹了。但实际上又不存在index.php这个文件夹,所以如果没有开启pathinfo模式,那么这个路径解析就会报找不到文件。而只有在开启pathinfo模式之后,服务器才会去执行index.php这个文件。

解决方法:
修改nginx配置文件nginx.conf

phpEnv - 配置 - nginx - nginx.conf文件

#user  nobody;
worker_processes  1;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    
	server_names_hash_bucket_size 512;
	client_header_buffer_size 32k;
	large_client_header_buffers 4 32k;
	client_max_body_size 100m;

	sendfile   on;
	#tcp_nopush on;

	keepalive_timeout 60;

	fastcgi_connect_timeout 300;
	fastcgi_send_timeout 300;
	fastcgi_read_timeout 300;
	fastcgi_buffer_size 64k;
	fastcgi_buffers 4 64k;
	fastcgi_busy_buffers_size 128k;
	fastcgi_temp_file_write_size 256k;
	fastcgi_intercept_errors on;

	gzip on;
	gzip_min_length  1k;
	gzip_buffers     4 16k;
	gzip_http_version 1.1;
	gzip_comp_level 2;
	gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml;
	gzip_vary on;
	gzip_proxied   expired no-cache no-store private auth;
	gzip_disable   "MSIE [1-6]\.";
	
	map $uri $path_info {
        ~^(.+\.php)(.*)$ $2;
    }

    server {
        listen 80;
        server_name _;
		autoindex on;
        index index.html index.htm index.php;
        root D:/phpEnv/server/nginx/html/;
		
		access_log  logs/access.log;
		
		location / {
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php?s=$1 last;
                break;
            }
        }

        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        $path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$path_info;
            include        fastcgi_params;
        }
		
		
		location = /favicon.ico {
			log_not_found off;
			access_log off;
		}
		

	}

	include vhosts/*.conf;
}

加入以上配置后,重启即可


http://www.kler.cn/news/353374.html

相关文章:

  • 【RL Latest Tech】安全强化学习(Safe RL):理论、方法与应用
  • 11. 盛最多水的容器 - 力扣(LeetCode)
  • 从零学习大模型(一)-----GPT3(上)
  • 信创服务器下搭建nfs共享存储方案
  • 数据库表的创建
  • 【软件安装与配置】 vue
  • 可以在桌面上用的倒计时提醒app下载
  • 什么是NLP?
  • 完全指南:如何高效进行业务应用开发?
  • 解决VScode(Visual Studio Code)中的乱码问题. 2024-10-13
  • 汽车管理系统——级联下拉框
  • 在 Android Studio 中引入android.os.SystemProperties
  • 计算机网络自顶向下(3)---TCPsocket
  • 2024.10.16 软考学习笔记
  • 卷积神经网络(CNN)-池化层-2
  • 【C语言】main函数乘积函数
  • 大数据开发工程师的岗位技能要求及自我介绍参考(持续更新)
  • 折半查找算法
  • 【python爬虫实战】爬取全年天气数据并做数据可视化分析!附源码
  • SpringBoot高校学科竞赛平台:性能优化与实践
  • es简单实现文章检索功能
  • 使用Docker部署nextjs应用
  • 【JAVA毕业设计】基于Vue和SpringBoot的渔具租赁系统
  • Spring Boot在医疗B2B平台中的病历数据安全
  • 【游戏模组】极品飞车12无间风云冬季mod,冬天版本的无间风云你体验过吗
  • llama大模型中,为什么推理部分使用kv cache,而训练部分不使用kv cache