在Nginx上部署ThinkPHP,解决Pathinfo问题
在Nginx上部署ThinkPHP,解决Pathinfo问题
事实上。要解决nginx不支持pathinfo的问题。有两个解决思路,一是不使用pathinfo模式,二是改动nginx的配置文件,使它支持pathinfo。
为了使问题简单化,我选择了第一种方式。由于就另外一种方式,我查了非常多资料,发现大家的方法不尽同样。有的还区别非常大,easy造成误导,所以我选择从简出发,选择普通模式。尽管有一定的风险。当把index.php相应的前台代码改动完成之后。发现前台基本正常。但是后台仍然出现重定向的问题。折腾了半天之后,我才想到看一下日志文件,原来是编辑器的问题,看来日志文件真的非常重要,曾经一直不重视。在config.php文件的第一行出现了输出,

在sublime下,通常会为UTF-8文件加入BOM头。这个BOM头在window下一般是看不见的,能够通过其它的编辑器查看到。Linux下也能够直接看到,通常显示出来是一个乱码字符。把这个字符删除就可以,或者简单一点。直接在第一行回车,再删除就能够了。到这里。后台基本能够訪问了。
有几个小问题须要说明一下(參考:http://www.lai18.com/content/368727.html)
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("请输入username或password!")
}else if(data=="autherr"){
alert("username或password错误。");
}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("请输入username或password!")
}else if(data=="autherr"){
alert("username或password错误。");
}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("\\","/",realpath($path)."/"); //获取绝对路径,并转换分隔符
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;
}
延伸阅读
4Thinkphp使用mongodb数据库实现多条件查询方法
9ThinkPHP中pathinfo的訪问模式、路径訪问模式及URL重写总结
10ThinkPHP基于PHPExcel导入Excel文件的方法
12ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
18ThinkPHP水印功能实现修复PNG透明水印并添加JPEG图片质量可调整
19thinkphp使用literal防止模板标签被解析的方法
21ThinkPHP中__initialize()和类的构造函数__construct()使用方法分析
24thinkphp实现发送邮件password找回功能实例
26Thinkphp搜索时首页分页和搜索页保持条件分页的方法
30ThinkPHP中url隐藏入口文件后接收alipay传值的方法
在Nginx上部署ThinkPHP,解决Pathinfo问题的更多相关文章
- 用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面
用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面 1.什么是跨域以及产生原因 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,或是a页面为ip地 ...
- Nginx上部署HTTPS
Nginx上部署HTTPS依赖OpenSSL库和包含文件,即须先安装好libssl-dev,且ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/, ...
- 在nginx上部署vue项目(history模式);
在nginx上部署vue项目(history模式): vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载.但是如果我们不想has ...
- Nginx上部署HTTPS + HTTP2
Nginx上部署HTTPS依赖OpenSSL库和包含文件,即须先安装好libssl-dev(或者OpenSSL),且ln -s /usr/lib/x86_64-linux-gnu/libssl.so ...
- 关于在BAE上部署ThinkPHP框架的问题
现在有点小兴奋,因为在在BAE上部署ThinkPHP框架的问题快折腾一天了,午觉都没睡,不过没白整总算有点结果.不扯淡了,直入正题吧. 之前熟悉ThinkPHP框架,想在BAE上用ThinkPHP做点 ...
- nginx上部署python web
nginx上部署python web http://uwsgi-docs.readthedocs.io/en/latest/tutorials/Django_and_nginx.html
- 在nginx上部署vue项目(history模式)--demo实列;
在很早之前,我写了一篇 关于 在nginx上部署vue项目(history模式) 但是讲的都是理论,所以今天做个demo来实战下.有必要让大家更好的理解,我发现搜索这类似的问题还是挺多的,因此在写一篇 ...
- 在Nginx上配置ThinkPHP项目
前段时间用Apache配合TP开发了一个小型网站,也算是我使用TP的第一次实战.我习惯使用pathinfo模式,本地运行一切正常,然而部署到服务器上时,由于对方使用的是Nginx,默认是不支持Thin ...
- Nginx下支持ThinkPHP的Pathinfo和URl Rewrite模式
下面介绍如何使Nginx支持ThinkPHP的Pathinfo和URL Rewrite模式. 1.ThinkPHP给出了ThinkPHP的官方解决方案,如下: 打开Nginx的配置文件 /etc/ng ...
随机推荐
- CSS3-transform-style
transform-style属性 transform-style属性是3D空间一个重要属性,指定嵌套元素如何在3D空间中呈现.他主要有两个属性值:flat和preserve-3d. transfor ...
- CSS3中制作倒影box-reflect
目前仅在Chrome.Safari和Opera浏览器下支持 box-reflect:none | <direction> <offset>? <mask-box-imag ...
- pandas模块(很详细归类),pd.concat(后续补充)
6.12自我总结 一.pandas模块 import pandas as pd约定俗称为pd 1.模块官方文档地址 https://pandas.pydata.org/pandas-docs/stab ...
- opencv中的各种滤波设计
这篇文章写得太好了 ,感觉自己实在没有办法去补充这方面的知识点 我打算把高斯滤波和双边滤波还好好补充下 这篇文章转载自一个美丽的才女:小魏 连接地址:http://blog.csdn.net/xia ...
- 自己项目使用了ARC,项目中使用第三方库继续引用ARC
Objective-C引入ARC(Automatic Reference Counting)后,我们经常会面对这样一种困境:自己的项目使用了ARC,却发现要使用的第三方类库是non-ARC的:又或者自 ...
- Brownie Slicing(二分枚举答案)
描述 Bessie has baked a rectangular brownie that can be thought of as an RxC grid (1 <= R <= 500 ...
- bzoj3874&2832 [Ahoi2014]宅男计划 模拟退火,三分
[Ahoi2014&Jsoi2014]宅男计划 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 962 Solved: 371[Submit][ ...
- Numpy 布尔型数组
一 给定一个列表,返回大于10的元素. 在python中,有两种方法.一种方法是循环遍历,第二种方法是使用内置函数filter() 在数组中,有更为简单的方法.即布尔型索引 布尔型索引: 将同样大小 ...
- poj 2318 向量的叉积二分查找
TOYS Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9350 Accepted: 4451 Description ...
- 对Netflix Ribbon的Loadbalancer类源码设计合理性的一点质疑
首先,这只是我个人的一点质疑,可能是因为我自己菜没有领悟到作者的意思,也正因此,想发出来跟大家一起探讨. 在昨晚,我因为在编写自己的开源项目的负载均衡模块(这是我开源项目的介绍:https://www ...