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


相关推荐: JS碰撞运动实现方法详解  利用vue写todolist单页应用  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  网站制作壁纸教程视频,电脑壁纸网站?  Laravel怎么判断请求类型_Laravel Request isMethod用法  Laravel Docker环境搭建教程_Laravel Sail使用指南  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Python3.6正式版新特性预览  Laravel API资源类怎么用_Laravel API Resource数据转换  Python文件流缓冲机制_IO性能解析【教程】  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel如何使用withoutEvents方法临时禁用模型事件  如何实现javascript表单验证_正则表达式有哪些实用技巧  怎么用AI帮你设计一套个性化的手机App图标?  Laravel如何实现用户密码重置功能?(完整流程代码)  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  使用C语言编写圣诞表白程序  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel如何为API生成Swagger或OpenAPI文档  手机软键盘弹出时影响布局的解决方法  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  香港网站服务器数量如何影响SEO优化效果?  如何在 Pandas 中基于一列条件计算另一列的分组均值  大型企业网站制作流程,做网站需要注册公司吗?  详解MySQL数据库的安装与密码配置  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel如何处理表单验证?(Requests代码示例)  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel如何配置和使用缓存?(Redis代码示例)  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  HTML 中动态设置元素 name 属性的正确语法详解  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何快速搭建自助建站会员专属系统?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  高端云建站费用究竟需要多少预算?  如何将凡科建站内容保存为本地文件?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  Android Socket接口实现即时通讯实例代码  如何快速生成橙子建站落地页链接?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  高防服务器如何保障网站安全无虞?  如何在腾讯云服务器上快速搭建个人网站?  Laravel如何配置任务调度?(Cron Job示例)  图册素材网站设计制作软件,图册的导出方式有几种?