网上通用解决方法的配置如下:

server {
...
location / {
index index.htm index.html index.php;
#访问路径的文件不存在则重写URL转交给ThinkPHP处理
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$ last;
break;
}
}
location ~ \.php/?.*$ {
root /var/www/html/website;
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
#加载Nginx默认"服务器环境变量"配置
include fastcgi.conf; #设置PATH_INFO并改写SCRIPT_FILENAME,SCRIPT_NAME服务器环境变量
set $fastcgi_script_name2 $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
set $fastcgi_script_name2 $;
set $path_info $;
}
fastcgi_param PATH_INFO $path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name2;
fastcgi_param SCRIPT_NAME $fastcgi_script_name2;
}
}

其实应该使用更简单的方法,fastcgi模块自带了一个fastcgi_split_path_info指令专门用来解决此类问题的,该指令会根据给定 的正则表达式来分隔URL,从而提取出脚本名和path info信息,使用这个指令可以避免使用if语句,配置更简单。
另外判断文件是否存在也有更简单的方法,使用try_files指令即可。

server {
...
location / {
index index.htm index.html index.php;
#如果文件不存在则尝试TP解析
try_files $uri /index.php$uri;
}
location ~ .+\.php($|/) {
root /var/www/html/website;
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php; #设置PATH_INFO,注意fastcgi_split_path_info已经自动改写了fastcgi_script_name变量,
#后面不需要再改写SCRIPT_FILENAME,SCRIPT_NAME环境变量,所以必须在加载fastcgi.conf之前设置
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info; #加载Nginx默认"服务器环境变量"配置
include fastcgi.conf;
}
}

转载:http://blog.csdn.net/tinico/article/details/18033573

修改thinkphp让他可以在nginx上运行

最近在用thinkphp做一个项目,基本完成后部署到nginx服务器上才发觉nginx是不支持pathinfo的,网上搜索了别人的解决方法,有两种思路:

  1、修改thinkphp让他可以在nginx上运行

  2、修改nginx让它支持pathinfo

  网上说nginx开启pathinfo是有一定风险的,能不用pathinfo最好不用,所以还是折腾thinkphp吧,个人觉得这种方法相对第2种方法来得简单

  修改nginx的rewrite

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

  然后项目配置下url模式改为2

'URL_MODEL'=>,

如果是多个项目,布署项目时要把项目布署到目录里,如后台的项目放到Admin目录里,那么在nginx的rewrite里再写一条

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

  最后也不要忘记把这个项目的url模式改为2。

转载:http://www.3lian.com/edu/2012/12-14/49363.html

Nginx环境
在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:

location / { // …..省略部分代码
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$ last;
break;
}
}

其实内部是转发到了ThinkPHP提供的兼容模式的URL,利用这种方式,可以解决其他不支持PATHINFO的WEB服务器环境。

如果你的ThinkPHP安装在二级目录,Nginx的伪静态方法设置如下,其中youdomain是所在的目录名称。

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

转载:http://doc.thinkphp.cn/manual/hidden_index.html

最完美解决Nginx部署ThinkPHP项目的办法的更多相关文章

  1. 【转载】最完美解决Nginx部署ThinkPHP项目的办法

    网上通用解决方法的配置如下: server { ... location / { index index.htm index.html index.php; #访问路径的文件不存在则重写URL转交给T ...

  2. [转]最完美解决Nginx部署ThinkPHP项目的办法

    From : http://www.htmltec.com/archives/302 网上通用解决方法的配置如下: server { location / { index index.htm inde ...

  3. Nginx部署ThinkPHP项目的办法

    thinkphp config配置: ', //URL模式 nginx rewrite配置: location / { if (!-e $request_filename) { rewrite ^(. ...

  4. 在IIS下部署Thinkphp项目,验证码不能显示的解决办法

    由于公司租用的是虚拟空间,而且用的是IIS服务器,所以部署PHP的时候就出现很多问题:比如昨天就碰到这个问题:在IIS下部署Thinkphp项目,验证码不能显示 这是生成验证码的方法: // 制作专门 ...

  5. 使用uWSGI+nginx部署Django项目

    最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...

  6. nginx部署h5项目

    1. nginx部署h5项目 此为windows部署,liunx也类似的 1.1. 前言 部署h5项目还是很简单的,不过对小白来讲一开始可能也是一脸懵逼,这个简单教程针对的是从未部署过前后端分离前端项 ...

  7. nginx部署vue项目

    nginx是一个高性能的HTTP和反向代理服务器.因此常用来做静态资源服务器和后端的反向代理服务器.本文主要记录使用nginx去部署使用vue搭建的前端项目,项目基于vue官方的脚手架vue-cli构 ...

  8. 服务器nginx部署PHP项目样式不出来要注意的小问题

    服务器使用nginx部署PHP项目的时候如果样式没有 出来,那么很可能 location 块里出问题了. 比如 location / { root /home/wwwroot/default/php_ ...

  9. 通过Nginx部署flask项目

    用Flask开发之后,很多人,喜欢用nohup python manage.py & 这样的形式,放到后台运行,其实这样只是个发开模式,很简陋,无法支持并发,进程监控等功能.所以采用nginx ...

随机推荐

  1. solr-1.4.1 环境配置

    solr-1.4.1 环境配置: Solr是一个apache名下非常好用的开源索引.搜索工具,网上的资料虽多但非常杂,笔者花了一天的时间对Solr进行了较为初步的研究,对Solr的基础应用做了一定的总 ...

  2. 如何安装SQL Server 2008数据库(带完整图解)

    在电脑上安装SQL Server 2008 软件时,经常会遇到各种各样的问题,如何成功的安装SQL Server 2008呢?提供完整过程和图片详解. 工具/原料 电脑一台 软件:sql server ...

  3. MySQL入门笔记

    MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: ·          rpm包形式 ·          通用二进制 ...

  4. Android(java)学习笔记136:Java类初始化顺序

    Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论:     1 .继承体系的所有静态成员初始化( ...

  5. 如何取消tableView的footer的粘滞效果

    footer默认的是固定在底部的  但有时我们需要和view一起滚动 主要是在scrollViewDidScroll这个代理方法中监听滚动的状况 设置如下 - (void)scrollViewDidS ...

  6. 4.关于phpstudy for linux 的安装(LNMP)更好的环境请看8.LNMP环境

    phpstudy真的很坑爹! 所以我在后面重新写了一个LNMP环境的集成包应用! 首先,我们在自己本地开发的时候一般使用的虚拟机的权限账号都是最高的,也就是我们的root账户 PS:我已经更改镜像源为 ...

  7. Java虚拟机专题

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/5160083. ...

  8. rownum与rowId

      一.RowNum Rownum是oracle生成结果集时得到的一个伪列, 按照读出行的顺序, 第一条rownum=1, 第二条=2. 对于 Oracle 的 rownum 问题,很多资料都说不支持 ...

  9. [原]Unity3d中奇怪的编译错误

    整理项目,重新build时出现一些问题,这些代码在原项目中都是可以运行的. 错误信息如下: Assets/XXXXX.cs(79,35): error CS0103: The name `NNNNNN ...

  10. PHP基础2

    一.函数赋值问题   function add($num1,$num2=5){ echo $num1+$num2; } add(5,19);   二.global 全局变量 把变量加入到全局变量数组中 ...