[转]最完美解决Nginx部署ThinkPHP项目的办法
2024-10-14 06:15:31
From : http://www.htmltec.com/archives/302
网上通用解决方法的配置如下:
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;
}
}
最新文章
- mysql重复记录的查询删除方法
- ld can't link with a main executable file for architecture armv7
- JS判断对象是否存在的方法
- maven 环境搭建 Myeclipse配置
- 使用JPA TOOLS从数据库生成Entity文件
- hdu 5510 Bazinga KMP+尺取法
- IllegalArgumentException 介绍
- BigDecimal-解决商业计算
- kubernetes 安装备注
- Git 密钥对处理
- MTK6261之Catcher工具的Database Path
- SpringBoot2.1整合finereport10(帆软报表)
- asp.net core 依赖注入实现全过程粗略剖析(2)
- U盘安装Ubuntu 14.04 LTS
- apache的bin目录下的apxs有什么作用? PHP模块加载运行方式
- 栈的实现与操作(C语言实现)
- Android开发训练之第五章第四节——Syncing to the Cloud
- Laravel 查询包括软删除的记录
- Noip前的大抱佛脚----奇技淫巧
- Bootstrap-CL:列表组
热门文章
- MarginTop 为何影响父元素的 MarginTop(转)
- 001.DHCP简介
- JAVA 画图板实现(基本画图功能+界面UI)一、界面实现
- DML和DQL 总结
- 解决:虚拟机能ping通主机,主机ping不通虚拟机
- linux安装project lemon测评机
- Java 操纵XML之读取XML文件
- Gym 100646 Problem E: Su-Su-Sudoku 水题
- LocalCache
- MikroTik RouterOS使用U盘安装提示FATAL ERROR: no CD-ROM found Press ENTER to reboot的问题解决