ThinkPHP 3.2 + Nginx 页面404问题

embedded/2024/10/18 6:07:53/

学习公司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.ppmy.cn/embedded/128370.html

相关文章

速盾:cdn有防御吗?

CDN(Content Delivery Network)是一种用于提供内容分发服务的网络架构,它通过将内容分发到全球各地的边缘节点,以实现更快的内容传输和更好的用户体验。CDN的主要目的是通过将内容缓存在离用户更近的服务器上来减少网络延迟&#…

Java JDK 23 新特性详解:功能、概念与用法

模块化与可伸缩平台进一步增强 自 JDK 9 引入模块系统以来,Java 模块化得到了广泛应用和扩展。JDK 23 在此基础上进行了更多的优化,使得模块系统更具可扩展性,尤其在大型应用程序的构建与维护方面,带来了更加灵活的模块依赖和增强…

测试基础概念

文章目录 一. 概念篇测试的概念软件测试领域面试题:测试和调试的区别面试题: 优秀人员具备的素质测试用例什么是需求开发模型和测试模型只需理解记忆特点和缺陷!开发模型软件的生命周期常见的开发模型瀑布模型(笔试题)…

2024-10-16 问AI: [AI面试题] 描述遗传算法的概念

文心一言 遗传算法(Genetic Algorithm,GA)是一种模拟生物进化过程的全局优化搜索算法,其概念可以从以下几个方面进行描述: 一、基本原理 遗传算法借鉴了达尔文的进化论和孟德尔的遗传学说,其本质是一种并…

perl文件测试操作符及其意义

perl文件测试操作符及其意义 文件测试操作符意义-r文件或目录,对目前(有效的)用户或组来说是可读的-w文件或目录,对目前(有效的)用户或组来说是可写的-x文件或目录,对目前(有效的&a…

详解Oracle审计(一)

题记: 有段时间没写过oracle了,今天回归。 本文将详细介绍oracle的审计功能,基于11g版本,但对12c,19c也同样适用。 审计(Audit)用于监视用户所执行的数据库操作,并且 Oracle 会将审…

限流是什么?如何限流?怎么限流?

概述 什么是限流 对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机 为什么要限流 因为互联网系统通常都要面对大并发大流量的请求,在突发情况下(最常见的场景就是秒杀、抢购),瞬时大流量会直接将系统打垮,无法…

HBase中的Write-Ahead Log 详解

HBase(Hadoop Database)是基于 Hadoop 的分布式、列族存储数据库,擅长处理大规模的结构化数据。HBase 采用了 Write-Ahead Log (WAL) 机制来保证数据的持久性和容错性,这与其他数据库的 WAL 概念类似,但在 HBase 的架构…