ThinkPHP 的 nginx 配置踩坑

thinkphp 的 nginx 配置踩坑

今天在用一个以 tp 为基础的快速开发框架时遇到一些问题:

nginx 报错截图

ThinkPHP 的 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教程

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享