nginx解决ThinkPHP PATHINFO不支持问题

好久没写PHP,最近因为项目指定ThinkPHP于是又重温PHP狂潮,由于长期写JavaScript以至于我忘了PHP的数组竟然还可以自定义key...闹笑话了。
ThinkPHP默认不是使用PATHINFO模式,对于目前主流的流行框架,貌似PATHINFO已经成为流行,更让我意外的是ThinkPHP还能支持路由,有点类似于Python网络框架的路由了。之前在网上看不少人在nginx开启PATHINFO模式主要修改localhost \.php 里的内容,但最近发现了一条更简便的方法:

 代码如下 复制代码

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

或者更高级点的

在nf文件增加如下配置

 代码如下 复制代码

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

}

利用了nginx的url重写机制实现了这一功能,而ThinkPHP的config.php也不需要添加:URL_MODEL => 1这个配置了。

补充:

网上搜了很多方法都不奏效,研究了一天,发现通过以下的配置可以完美支持 'URL_MODEL' => 2 的情况了

 代码如下 复制代码

location /project/ {

 index index.php;

 if (!-e $request_filename) {

 rewrite ^/project/(.*)$ /project/index.php/$1 last;

 break;

 }

}

location ~ .+\.php($|/) {

 set $script $uri;

 set $path_info "/";

 if ($uri ~ "^(.+\.php)(/.+)") {

 set $script $1;

 set $path_info $2;

 }

 

 fastcgi_pass 127.0.0.1:9000;

 fastcgi_index index.php?IF_REWRITE=1;

 include /APMServ/nginx/conf/fastcgi_params;

 fastcgi_param PATH_INFO $path_info;

 fastcgi_param SCRIPT_FILENAME $document_root/$script;

 fastcgi_param SCRIPT_NAME $script;

}

这里先把project下的请求都转发到index.php来处理,亦即ThinkPHP的单一入口文件;然后把对php文件的请求交给fastcgi来处理,并且添加对PATH_INFO的支持。

重启Nginx以后,http://localhost/project/Index/insert, http://localhost/project/index.php/Index/delete 这样的URL都可以正确访问了。

时间: 2024-10-03 07:22:58

nginx解决ThinkPHP PATHINFO不支持问题的相关文章

在nginx中配置pathinfo模式支持thinkphp的URL重写_nginx

最近一个项目中使用了ThinkPHP做为开发框架,URL上我们使用了PATHINFO模式,但是Nginx默认是不支持PATHINFO的,需要进行手动配置才可以,于是我们按照了以下方法进行了Nginx的PATHINFO支持配置:修改nginx.conf,找到server中的 location ~ .php${},修改为location ~ .php {},并在其中增加以下内容: 复制代码 代码如下: set $path_info "";set $real_script_name $fas

nginx+thinkphp下解决不支持pathinfo模式_php技巧

nginx环境问题弄了两天,发现网上很多人的帖子要么复制粘贴,要么就是没有结贴,还自己写一句"哈哈,我自己解决了"之类的,这点我就鄙视这些发帖的同胞了,你说你问题问了,问题解决了也不给个解释.还在搜索的前几页,想没想过需要答案的人的感受呢.满心欢喜的去看答案,发现没有结贴.好吧,不多说,进入正题. 我这种方式是不需要将URL_Model改为rewrite/兼容的: 大约第43行,按照下面的对照自己的code进行修改,请注意细节的符号: location / { root C:/Zend

Ubuntu下Nginx配置ThinkPHP的Pathinfo和URl Rewrite模式_nginx

概述 在上一篇文章Nginx配置Thinkphp支持URL Rewrite中已经介绍了如何配置Nginx支持ThinkPHP的URL Rewrite,但是上文针对的是Centos平台,这次因为某些特殊的原因,服务器环境必须用ubuntu,本来以为和Cetons中一模一样,但是配置完了发现不能使用,所以就百度了一些文章. 配置方法TP官方解决方案 复制代码 代码如下: location ~ .php         {                 #原有代码                  

nginx中配置pathinfo模式示例_nginx

缘由 很久不使用apache了,渐渐对apache感到陌生,因为朋友有个ZendFramework框架从apache移到nginx下,需要pathinfo模式支持. 网上海搜 于是开始搜索nginx+pathinfo相关文章,一开以为很容易就会配置好.因为搜索后发现有大量文章介绍nginx开启pathinfo模式,感觉不是什么难事.但是经过几个小时下来,还是没有配置好.并且大量文章的内容都极其相似,基本都是转载的. 开始有点急了!因为一天过去了没有配好. 继续摸索 没办法,继续搜索.为了验证方便

服务器-nginx配置thinkphp的rewrite

问题描述 nginx配置thinkphp的rewrite 以前web用apache的架设thinkphp的程序,但是转为nginx的服务器后,一直不能正常网站,就是规则重写的问题: apache的配置:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSAPTL] RewriteRule ^/?([a-z

完美解决thinkphp验证码出错无法显示的方法_php实例

本文实例讲述了完美解决thinkphp验证码出错无法显示的方法.分享给大家供大家参考.具体分析如下: 今天做到验证码这一块,想到tp自带验证图片,大喜,但鼓捣半天不出来,一直是个小 X的样子. 官方提示如下:如果无法显示验证码,请检查: ① PHP是否已经安装GD库支持: ② 输出之前是否有任何的输出(尤其是UTF8的BOM头信息输出): ③ Image类库是否正确导入: ④ 如果是中文验证码检查是否有拷贝字体文件到类库所在目录: 但是测试半天,不行!网上找来一个能用的方法,放到一个文件里执行可

解决ThinkPHP关闭调试模式时报错的问题汇总

  解决ThinkPHP关闭调试模式时报错的问题汇总         本文给大家汇总了一下个人在项目中所遇到的关闭ThinkPHP的调试模式时遇到报错的几种情况以及最终的处理办法,非常的简单实用,这里分享给大家,有需要的小伙伴可以参考下. 案例一: 最近用ThinkPHP开发一个项目,本地开发测试完成上传到服务器后,第一次打开正常,再刷新页面时就出现 "页面调试错误,无法找开页面,请重试"的错误. 我就郁闷啦,明明本地设置define('APP_DEBUG', false) 运行没点问

ThinkPHP多语言支持与多模板支持概述_php实例

本文以实例形式简述了ThinkPHP的多语言支持与多模板支持.是ThinkPHP中非常重要的技巧,分享给大家供大家参考.具体如下: 一.ThinkPHP多语言支持: config.php配置文件中添加: //多语言支持设置 'LANG_SWITCH_ON'=>true, 'DEFAULT_LANG'=>'zh-cn', 'LANG_AUTO_DETECT'=>true, 'LANG_LIST'=>'en-us,zh-cn,zh-tw', Home/Lang/文件夹下建立三个文件夹,

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

打开Nginx的配置文件 /usr/local/nginx/conf/nginx.conf 一般是在这个路径,根据你的安装路径可能有所变化.如果你配置了vhost,而且只需要你这一个vhost支持pathinfo的话,可以直接打开你的vhost的配置文件.找到类似如下代码(不同版本的nginx可能稍有不同,但是相差不会很远): 复制代码 代码如下:     location ~ .*.(php|php5)?$         {                 #原有代码         } 修