Nginx下ThinkPHP5的配置方法详解

发布时间 - 2026-01-11 02:35:28    点击率:

本文主要给大家介绍了关于Nginx下ThinkPHP5的配置方法,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:

url里public目录的隐藏

出于安全的考虑,TP5的入口文件改成放在public下了,因为这样的话能防止被恶意用户访问到“/thinkphp/”、“/vendor/”等等这些目录下的文件。所以当你以之前的习惯将网站documentroot配置为项目根目录的时候就会需要在url后面加上/public/来访问。当然可能也会有童鞋把入口文件放回到根目录下,然后还是以之前3.x版那样的形式访问了。

但是很显然,这么做并不是那么的科学。

假设项目目录为“/web/wwwroot/augsky.com”,那么我们在网站的nginx配置文件里面将root配置为:

root /web/wwwroot/augsky.com/public;

但是一定要记得将open_basedir设置为上一级项目的根目录下,不然应用会没有权限调用除public目录下的其他文件,网站会报500无法访问。(open_basedir的配置默认在php.ini里面,但如果是多个虚拟机环境的话有可能会在各个网站的user.ini文件里,这个要根据自己的实际情况来。)具体配置如下:

open_basedir=/web/wwwroot/augsky.com:/tmp/:/proc/

隐藏入口文件index.php:

location /
  {
    try_files $uri $uri/ /index.php?s=$uri&$args;
    #如果请求不是文件或目录,则将uri交给index.php处理,同时保留参数
  }

说一下try_files:

try_files
语法: try_files file1 [file2 ... filen] uri
     OR
  try_files file1 [file2 ... filen] =code
默认值: 无
作用域: server location

try_files支持多个参数,每个参数代表一个文件,系统将按顺序检查这些文件是否存在,存在就直接执行,斜线“/”结尾代表目录,若都不存在,则会重定向到最后一个参数指向的文件或者返回指定的http状态码。

pathinfo配置

在配置文件里面增加这一段(如果你是lnmp一键包用户,请略过这一段往下翻):

location ~ [^/]\.php(/|$) {
  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_pass unix:/tmp/php-cgi.sock;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
  fastcgi_param SCRIPT_NAME $real_script_name;
  fastcgi_param PATH_INFO $path_info;
  include  fastcgi_params;
}

上面需要说明的是fastcgi_pass的设置,这个得根据你实际的php版本和安装目录来设定。

好,做完这些之后,保存,重启nginx和php就能生效了。如果你是lnmp一键包用户的话不用上面这样设置,往下面看:

lnmp一键包pathinfo的设置

其实lnmp一键包里面的pathinfo军哥已经都写好了,我们只需要把include enable-php.conf;修改成include enable-php-pathinfo.conf;然后重启lnmp就搞定了。

#include enable-php.conf;或者,你直接注释掉这一行,在下面添加新的一行
include enable-php-pathinfo.conf;

就是这样简单。下面顺便附上在url里隐藏模块的方法

url隐藏默认模块index

很简单,在入口文件里面定义常量BIND_MODULE为你使用的模块就好了,以默认的index为例:

define('BIND_MODULE', 'index');

这样,在url里面不会在有模块名这一级目录了。要知道,层级少一些的url对SEO是有好处的。

下面是nginx里面location的匹配规则

Nginx location的匹配规则

  • ~ 波浪线表示执行一个正则匹配,区分大小写
  • ~* 表示执行一个正则匹配,不区分大小写
  • ^~ ^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
  • = 进行普通字符精确匹配
  • @ #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

location 匹配优先级

  • = 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。
  • 普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
  • ^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。
  • 最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持


# thinkphp5  # nginx配置  # nginx  # thinkphp  # 配置  # thinkPHP框架动态配置用法实例分析  # thinkPHP5.0框架独立配置与动态配置方法  # Thinkphp 框架配置操作之配置加载与读取配置实例分析  # ThinkPHP 5.1 跨域配置方法  # ThinkPHP3.2框架自定义配置和加载用法示例  # thinkPHP5.0框架配置格式、加载解析与读取方法  # thinkPHP5.0框架简单配置作用域的方法  # thinkPHP5.0框架环境变量配置方法  # thinkPHP中钩子的两种配置调用方法详解  # Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析  # 一键  # 正则表达式  # 你是  # 多个  # 会在  # 会报  # 往下  # 重启  # 配置文件  # 自己的  # 的是  # 这一  # 就会  # 会有  # 好了  # 放在  # 都不  # 目录下  # 是有  # 第一个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Android GridView 滑动条设置一直显示状态(推荐)  iOS中将个别页面强制横屏其他页面竖屏  Laravel如何发送系统通知?(Notification渠道示例)  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  再谈Python中的字符串与字符编码(推荐)  如何用已有域名快速搭建网站?  jQuery validate插件功能与用法详解  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  七夕网站制作视频,七夕大促活动怎么报名?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  昵图网官方站入口 昵图网素材图库官网入口  如何在腾讯云免费申请建站?  新三国志曹操传主线渭水交兵攻略  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  Laravel如何创建自定义中间件?(Middleware代码示例)  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel如何实现API资源集合?(Resource Collection教程)  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  详解阿里云nginx服务器多站点的配置  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在阿里云完成域名注册与建站?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Laravel如何为API生成Swagger或OpenAPI文档  网站建设要注意的标准 促进网站用户好感度!  jquery插件bootstrapValidator表单验证详解  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  黑客如何利用漏洞与弱口令入侵网站服务器?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  Bootstrap整体框架之CSS12栅格系统  重庆市网站制作公司,重庆招聘网站哪个好?  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  nginx修改上传文件大小限制的方法  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  教你用AI润色文章,让你的文字表达更专业  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Python自动化办公教程_ExcelWordPDF批量处理案例  如何快速查询网站的真实建站时间?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  如何在万网自助建站中设置域名及备案?  Windows Hello人脸识别突然无法使用  JavaScript中的标签模板是什么_它如何扩展字符串功能  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Linux后台任务运行方法_nohup与&使用技巧【技巧】