thinkphp 的 nginx 配置踩坑
今天在用一个以 tp 为基础的快速开发框架时遇到一些问题:
nginx 报错截图

为了方便说明进行手动换行
立即学习“PHP免费学习笔记(深入)”;
// 处理时重写或内部重定向循环
2019/11/11 11:16:06 [error] 15164#15432: *1 rewrite or internal redirection cycle while processing
"/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index.php/index/user/index.html",
client: 127.0.0.1,
server: xxxxx,
request: "GET /index/user/index.html HTTP/1.1",
host: "xxxxx",
referrer: "xxxxx"错误配置
参考 larvael 配置
server {
.
.
.
location / {
try_files $uri $uri/ /index.php?$query_string;
}
.
.
.
location ~ \.php$ {
fastcgi_pass127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
.
.
.
}发现所有路径都一样,都是首页效果
初步判断 nginx 重写规则有问题
# 路径 / 开头之后都走这个匹配
# 如 /index /index/user
location / {
# $uri 本地有就返回,或者$uri/ 本地有目录就返回,或者走后面的重写
# 本地是指在网站根目录下,如 当 $uri=index 就是看根目录下面有 index 文件或者 index/ 目录
try_files $uri $uri/ /index.php?$query_string;
}开始报错
解决问题
网上查询后 tp5 的配置应为
location / {
try_files $uri $uri/ /index.php$uri;
}改后,发现问题没解决;对比配置发现
# location ~ \.php$ 改成 location ~ \.php(.*)$
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}解决,完整配置
server {
listen 80;
server_name xxxxxxx ;
root www;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
charset utf-8;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$uri;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}推荐学习:thinkphp教程
以上就是ThinkPHP 的 nginx 配置踩坑的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号