解决nginx不支持thinkphp中pathinfo的问题_php技巧

下面小编通过文字加代码的方式给大家详解下,具体内容如下:

其实,要解决nginx不支持pathinfo的问题,有两个解决思路,一是不使用pathinfo模式,二是修改nginx的配置文件,使它支持pathinfo。为了使问题简单化,我选择了第一种方式,因为就第二种方式,我查了很多资料,发现大家的方法不尽相同,有的还差别很大,容易造成误导,所以我选择从简出发,选择普通模式,虽然有一定的风险。当把index.php对应的前台代码修改完毕之后,发现前台基本正常,可是后台仍然出现重定向的问题。折腾了半天之后,我才想到看一下日志文件,原来是编辑器的问题,看来日志文件真的很重要,以前一直不重视。在config.php文件的第一行出现了输出,

在sublime下,一般会为UTF-8文件添加BOM头,这个BOM头在window下通常是看不见的,可以通过其他的编辑器查看到,Linux下也可以直接看到,通常显示出来是一个乱码字符,把这个字符删除即可,或者简单一点,直接在第一行回车,再删除就可以了。到这里,后台基本可以访问了。

1.在登录的时候,我是通过外部js文件发送Ajax请求进行验证的,在js与ThinkPHP模块函数通信遇到了点问题,一直不知道正确的路径该怎么写,也没有查到相关资料,只能各种试,好在找到了解决办法,通过直接带上入口文件名的方式

var url="system.php?m=Login&a=doLog";
 $.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){
  if(data=="codeerr"){
   alert("验证码错误!");
  }else if(data=="authempty"){
   alert("请输入用户名或密码!")
  }else if(data=="autherr"){
   alert("用户名或密码错误!");
  }else if(data=="success"){
   alert("登录成功!");
   location.href="system.php?m=Index&a=index"; //访问首页
  }

当然,此为普通模式下的访问方式,如果是pathinfo的话,只需要把红色部分如下修改即可

var url="doLog";
 $.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){
  if(data=="codeerr"){
    alert("验证码错误!");
  }else if(data=="authempty"){
    alert("请输入用户名或密码!")
  }else if(data=="autherr"){
    alert("用户名或密码错误!");
  }else if(data=="success"){
    alert("登录成功!");
    location.href="../Index/index"; //跳转首页,访问其他模块的方法

2.下载文件的时候,总是莫名多出许多html的东西,原因是缓冲区没有清空,可以通过以下代码进行修改,不过这种方式实际上是下载的仍然是html格式的文件,只不过改了一下后缀名为xls而已,因而用excel打开的时候会提示格式问题,忽略即可。同时需要注意使用 icov()函数转换编码,因为xls默认编码格式并非utf-8.

ob_start();
ob_end_clean();
Header( "Content-type: application/octet-stream");
Header( "Accept-Ranges: bytes ");
Header( "Content-type:application/vnd.ms-excel;charset=gb2312");
Header( "Content-Disposition:attachment;filename={$filename}.xls");

3.在删除文件时会遇到路径问题,因为项目中使用的较多的是相对路径,即相对入口文件而言,但是删除文件则需要使用绝对路径,我并没有找到合适的解决方法,只好用了比较保守的方式

复制代码 代码如下:

$path="./Public/uploads/";     
$path=str_replace("<a target="_blank" href="file:///" style="color:rgb(51,119,170); text-decoration:none">\\","/",realpath($path)."/</a>");  //获取绝对路径,并转换分隔符 

4.在配置nginx和php方面,我使用了fastCGI的方式,将如下代码保存为cmd文件,直接点击运行就可以了
"F:\php\php-cgi.exe" -b 127.0.0.1:9000 -c "F:\php\php.ini" //后面是php文件的路径
然后在nginx的配置文件里加上几句话

location ~ \.php/?.* {
   root   myapplications;
   fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   include  fastcgi_params;
   #定义变量 $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上部署ThinkPHP,解决Pathinfo问题,希望能够帮助到大家。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索nginx不支持pathinfo、nginx不支持thinkphp、thinkphp pathinfo、thinkphp5 pathinfo、thinkphp开启pathinfo,以便于您获取更多的相关知识。

时间: 2024-08-19 12:13:57

解决nginx不支持thinkphp中pathinfo的问题_php技巧的相关文章

Nginx配置支持ThinkPHP的PATH_INFO_nginx

概述 今天遇到一个问题,Ubuntu+Nginx+MySQL配置ThinkPHP的项目,做了一半发现,Nginx不支持ThinkPHP的PATH_INFO模式,百度了好久,在朋友的帮忙下才解决,记录下. Nginx支持ThinkPHP的PATH_INFO 环境 Ubuntu 14.04+Nginx+MySQL.所有程序都是通过apt-get安装的,所以Nginx的配置文件路径在/etc/nginx/sites-available/default. 解决方法 定位到Nginx配置文件的如下部分:

Nginx下支持Thinkphp URL Rewrite的配置示例_nginx

概述 Nginx服务器现在已经成为相当流行的开源Web服务器,很多生产环境也都在使用Nginx服务器.现在做项目大多数时候都是在使用ThinkPHP,但是Nginx默认不支持ThinkPHP的pathinfo模式,需要进行一定的配置. Nginx配置文件 # # The default server # server { listen 80 default_server; #server_name www.example.com; #charset koi8-r; #access_log log

解决nginx 不支持 PATH_INFO的方法

 代码如下 复制代码 server {      listen 80;      server_name www.sample.com;      root /www;      index index.php index.html;      location / {          index index.php index.html index.htm;          include /www_rewrite/.htaccess;      }        location ~ .

ThinkPHP中关联查询实例_php实例

本文实例讲述了ThinkPHP中关联查询的用法.分享给大家供大家参考.具体分析如下: 在THINKPHP中关联查询(多表查询)可以使用 table() 方法或和join方法,如下示例所示: 1.table() 复制代码 代码如下: $list = $user->table('user_status stats, user_profile profile')->where('stats.id = profile.typeid')->field('stats.id as id, stats.

ThinkPHP中redirect用法分析_php实例

本文实例讲述了ThinkPHP中redirect用法.分享给大家供大家参考.具体分析如下: redirect 重定向的通用语法为:redirect(url,params=array(),delay=0,msg=''),假设当前为默认 HOME分组 Aritcle模块 insert操作,一些例子如下: 复制代码 代码如下: // 跳转到 edit 操作   $this->redirect('edit');   // 跳转到 UserAction下的edit 操作   $this->redirec

利用JS解决ie6不支持max-width,max-height问题的方法_javascript技巧

今天遇到一个关于用js解决ie6不支持支持max-width,max-height的问题,刚开始用jQuery方法来实现,不过一直获取不到css里面的值,如 复制代码 代码如下:   if($.browser.msie && $.browser.version == 6.0)  {    var maxWidth = parseInt($('.viewBigPic img').css('max-width'));    $('.viewBigPic img').each(function(

Ubuntu中搭建Nginx、PHP环境最简单的方法_php技巧

前言:百度出来的结果好坑爹,而且某些文章说别人坑爹,可他自己也坑爹.求业界良心啊.还是谷歌靠谱. 系统环境:Ubuntu 13 和 Linux Mint 15都通过. 默认安装的是nginx 1.2.5,php5.4.9 先安装: 复制代码 代码如下: sudo apt-get install nginx php5-fpm 我是在新安装的Ubuntu13上测试通过的,真的只安装这两个东西就够了. 然后编辑配置文件. 复制代码 代码如下: sudo gedit /etc/nginx/site-av

php中强制下载文件的代码(解决了IE下中文文件名乱码问题)_php技巧

中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下. 复制代码 代码如下: <?php $file_name = urlencode($_REQUEST['filename']); header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, po

THINKPHP支持YAML配置文件的设置方法_php技巧

为什么要用 yaml 因为 Yaml 简单,而且对人类友好: Yaml: http://www.yaml.org/ 在哪里会用到? 最基本的,在 ThinkPHP 的配置文件里面就可以选择 Yaml 的格式,你是愿意写 Yaml 的简洁格式配置呢?还是愿意写又长又臭又难写的 PHP array 呢? http://document.thinkphp.cn/manual_3_2.html 问题来了 于是,我把配置格式改为 Yaml: 复制代码 代码如下: // /index.php // 定义配置