Nginx下支持ThinkPHP的Pathinfo和URl Rewrite模式

我的环境

系统 :    Ubuntu12.04    x86_64

环境 :    Nginx1.1.19+PHP5.3.10+Mongo2.6.3

由于公司要用Nginx+Mongo+PHP,所以我要把刚刚配置好的LAMP推翻,然后重新安装LNMP。软件安装就不在这里介绍了,如果有需要,可以看这里。

如何安装Nginx。

下面介绍如何使Nginx支持ThinkPHP的Pathinfo和URL Rewrite模式。
1、ThinkPHP给出了ThinkPHP的官方解决方案,如下:

打开Nginx的配置文件 /etc/nginx/nginx.cof 一般是在这个路径,根据你的安装路径可能有所变化。如果你配置了vhost,而且只需要你这一个vhost支持pathinfo的话,可以直接打开你的vhost的配置文件。找到类似如下代码(不同版本的nginx可能稍有不同,但是相差不会很远):

    location ~ .php
        {
                #原有代码
                
                #定义变量 $path_info ,用于存放pathinfo信息
                set $path_info "";
                #定义变量 $real_script_name,用于存放真实地址
                set $real_script_name $fastcgi_script_name;
                #如果地址与引号内的正则表达式匹配
                if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                        #将文件地址赋值给变量 $real_script_name
                        set $real_script_name $1;
                        #将文件地址后的参数赋值给变量 $path_info
                        set $path_info $2;
                }
                #配置fastcgi的一些参数
                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
        }

这样,nginx服务器就可以支持pathinfo了。但是如果要支持ThinkPHP的URL_MODE设置为2的模式,还需要配置rewrite规则。找到access_log语句,在其上方加上以下语句:

    #如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
    if (!-e $request_filename)
    {
            #地址作为将参数rewrite到index.php上。
            rewrite ^/(.*)$ /index.php/$1;
            #若是子目录则使用下面这句,将subdir改成目录名称即可。
            #rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
    }

以上方法虽然是ThinkPHP官方给出的,想必也是经过验证的,但悲催的是对我并不起作用。

2、我的解决方案

我是在sites(vhost)下配置的,在/etc/nginx/sites-available/目录下。当然你也可以直接在/etc/nginx/nginx.conf里配置。
然后在php配置栏目中添加如下两行:

fastcgi_split_path_info ^(.+\.php)(.*)$;                             
fastcgi_param PATH_INFO $fastcgi_path_info; 

完整配置如下

 location ~ \.php$ {
                root /var/www;
                try_files $uri = 404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
        #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #
        #       # With php5-cgi alone:
                #fastcgi_pass 127.0.0.1:9000;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_param PATH_INFO $fastcgi_path_info;
        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

大宝日记版权所有,转载请注明出处。
原文地址:http://www.sundabao.com/nginx%E4%B8%8B%E6%94%AF%E6%8C%81thinkphp%E7%9A%84pathinfo%E5%92%8Curl-rewrite%E6%A8%A1%E5%BC%8F/

使用Nginx配置实现ThinkPHP5的Pathinfo模式兼容 ThinkPHP5是一种流行的PHP开发框架,它支持多种URL访问模式,其中一种常见的模式是Pathinfo模式。在Pathinfo模式下,URL中的参数会以路径的形式传递给应用程序,这在某些情况下非常有用。然而,默认情况下,Nginx并不直接支持Pathinfo模式,因此我们需要进行一些配置来实现Pathinfo模式的兼容。通过以上配置,我们成功地实现了Nginx对ThinkPHP5的Pathinfo模式的兼容。完成以上配置后,保存Nginx的配置文件,并重启Nginx服务器,使配置生效。 阅读详情

相关推荐

Flow Matching实战:5步搞定图像生成模型优化(附PyTorch代码)

本文提供了一份基于Flow Matching框架优化图像生成模型的实战指南。通过五个关键步骤,详细讲解了从环境配置、核心概念梳理到构建向量场网络、设计损失函数、编写训练循环以及选择ODE求解器进行采样的完整流程,并附有可运行的PyTorch代码,帮助开发者快速掌握这一高效的生成式建模技术。

weixin_29065959的博客 320

在Nginx上部署ThinkPHP,解决Pathinfo问题

在Nginx上部署ThinkPHP,解决Pathinfo问题 事实上。要解决nginx不支持pathinfo的问题。有两个解决思路,一是不使用pathinfo模式,二是改动nginx的配置文件,使它支持pathinfo。为了使问题简单化,我选择了第一种方式。由于就另外一种方式,我查了非常多资料,发现大家的方法不尽同样。有的还区别非常大,easy造成误导,所以我选择...

weixin_33883178的博客 179

开源onlyoffice编译完整过坑版

onlyoffice 编译过坑完整版;

sHImart 4551

thinkphp在nginx下pathinfo支持

thinkphp在nginx下pathinfo支持在apache下运行正常,但是在nginx下内页都是404空白。解决办法:首先:修改nginx的rewritelocation / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break; } }然后:项目配置下url模式改为2...

weixin_34377065的博客 106

[机器学习-回归实例] 李宏毅机器学习作业一:PM2.5 预测实例

[机器学习-回归实例] 李宏毅机器学习作业一:PM2.5 预测实例 简介   这是一个回归预测的实例,数据集来自李宏毅的《机器学习》课程的第一次作业,可以用来训练一个线性回归模型或者其他的回归模型,动手实践学习到的理论知识,在实践中去发现问题。这篇文章主要包括数据集的解释、数据的预处理过程及线性回归模型的代码实现这三个部分。由于这个数据集并不能直接使用,还需进行一些重构,为了对初学者更友好一些,我会提供重构完的可以读取后就直接使用的数据集,我也会提供 Matlab\rm MatlabMatlab 可直接使用

qq_27309515的博客 3574

YOLOv8改进 | 特殊场景检测篇 | 最新的多尺度特征提取DICAM(全网独家首发,增强水下图像的质量)

本文给大家带来的最新改进机制是多尺度特征提取和通道注意力机制DICAM,深度Inception和通道注意力模块(DICAM)主要用于用于增强水下图像的质量、对比度和色偏。所提出的DICAM模型考虑了水下图像的比例退化和不均匀色偏,从而提高图像的质量。通过在两个公开的水下图像增强数据集上的广泛实验,验证了提出的模型在全参考和无参考图像质量评估指标方面。欢迎大家订阅我的专栏一起学习YOLO,购买专栏读者联系读者入群获取进阶项目文件!

Snu77的博客 2216

最完美解决Nginx部署ThinkPHP项目的办法

网上通用解决方法的配置如下: server { ... location / { index index.htm index.html index.php; #访问路径的文件不存在则重写URL转交给ThinkPHP处理 if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; break; } }

u014796929的博客 1万+

ardupilot 日志分析《xKF1信息》

ardupilot 日志分析系列将会把ardupilot所有的日志文档进行分析,为我们分析无人机的运行状态,炸鸡原因,传感器状态,电机状态,控制信息,滤波信息做准备。本节主要分析xKF1日志信息,欢迎批评指正。学习好ardupilot必须会分析飞行日志,从飞行日志中我们可以学到很多无人机的知识。无人机是综合知识的体现,涵盖:导航、控制、滤波、算法、协议等各种知识,只有更全面的学习,才能在无人机的道路上越走越远。

陌城烟雨 1225

THINKPHP的NGINX rewrite的两种配置

一、普通方式server { ... location / { index index.htm index.html index.php; #访问路径的文件不存在则重写URL转交给ThinkPHP处理 if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$

GATSBYER的博客 988

YOLO26涨点改进 | 检测头Head创新改进篇 | 利用DynamicConv高效动态卷积改进YOLO26检测头,DyHead通过增强检测头操作,轻量化改进、提高模型目标检测的精度

YOLO26作为新一代轻量化目标检测模型的代表,凭借精简的Backbone架构、高效的特征融合 Neck 设计,在实时检测场景(如嵌入式设备、边缘计算)中展现出优异的性能,成为工业落地与科研入门的优选模型。但在实际应用中,YOLO26原生检测头仍存在核心瓶颈:采用固定参数卷积核,无法根据输入特征的目标尺度、纹理差异动态调整卷积权重,导致多尺度目标适配不足、复杂背景下特征利用率低,且传统改进方案往往难以平衡“精度提升”与“轻量化”,要么精度提升有限,要么大幅增加参数量、拖累推理速度。

qq_36130719的博客 370

[3.4]【机器人运动学MATLAB实战分析】PUMA560机器人逆运动学MATLAB计算

PUMA560是六自由度关节型机器人,其6个关节都是转动副,属于6R型操作臂。各连杆坐标系如图1,连杆参数如表1所示。本文对PUMA560机器人逆运动学进行分析并MATLAB计算

m0_72676510的博客 1947

Nginx下使Thinkphp URL模式支持PATHINFO和REWRITE

1.支持PATHINFO 找到location ~ \.php { ,把$去掉,并在里面加上这两句 fastcgi_split_path_info ^(.+\.php)(.*)$; #增加 fastcgi_param PATH_INFO $fastcgi_path_info; #增加 即 location ~ \.php { #去掉$ ...

测试 320

串口通信的性能瓶颈分析:如何提高数据吞吐量和降低延迟

摘要: 串口通信在高频或大数据场景下存在吞吐量不足、延迟高、丢帧等问题,主要瓶颈包括波特率限制、缓冲区不足、CPU轮询延迟等。优化策略包括:提升波特率至硬件上限、增大缓冲区、采用异步I/O(如ReadAsync)减少线程切换,使用二进制协议降低解析开销。实时性方面需启用硬件流控、批量发送数据,并优化线程优先级。跨平台适配需区分Windows/Linux的缓冲区设置与异步机制。性能测试可通过吞吐量、延迟及回环测试验证优化效果,核心原则是硬件匹配、异步处理、协议优化与跨平台适配。(150字)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 980

Nginx服务器下使Thinkphp URL模式支持PATHINFO模式和REWRITE模式

默认nginx服务器是不识别pathinfo模式和rewrite模式的路由的,下面我们做一些配置,让nginx服务器支持这些路由模式PATHINFO找到location ~ \.php { #\.php$ 里面的$去掉,并在里面加上下面两句fastcgi_split_path_info ^(.+\.php)(.*)$; #增加 fastcgi_param PATH_INFO $fast

李海江的博客 2974

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Nginx下使Thinkphp URL模式支持PATHINFO和REWRITE (转载自威明的csdn博客)

1.支持PATHINFO找到location ~ \.php { ,把$去掉,并在里面加上这两句 fastcgi_split_path_info ^(.+\.php)(.*)$; #增加 fastcgi_param PATH_INFO $fastcgi_path_info; #增加即location ~ \.php { #去掉$ root h...

zchare的博客 269

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Nginx下配置ThinkPHP的URL Rewrite模式和pathinfo模式支持

前面有关于lnmp环境的搭建,在此就不在赘述。下面就简述thinkPHP如何在nginx下开启url_rewrite和pathinfo模式支持 主要有两个步骤: 一、更改php.ini将;cgi.fix_pathinfo=0 改为cgi.fix_pathinfo=1 二、更改nginx配置文件中php的location设置pathinfo模式: location ~ \.php { ...

weixin_30507481的博客 159

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Nginx重写】下支持ThinkPHP的Pathinfo和URl Rewrite模式

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33849215的博客 142

nginx、TP框架实现兼容pathinfo和rewrite两种url访问方式

nginx、TP框架实现兼容pathinfo和rewrite两种url访问方式 环境:centos7,yum安装的nginx1.10、php-fpm,tp3.2本方法只需要配置nginx.conf的一个文件就可以支持pathinfo和rewrite两种url访问方式 vim /etc/nginx/nginx.conf 1 1、支...

weixin_34124651的博客 108
上一篇: 初识MongoDB
下一篇: 什么是目录遍历攻击及如何防护
S孙大宝
博客等级 码龄15年 55粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值