title: 关于ThinkPHP框架项目在二级目录时,__PUBLIC__路径的问题
tags: ThinkPHP,PUBLIC
grammar_cjkRuby: true
---
**__PUBLIC__解析的问题**
在二级目录下开发基于ThinkPHP项目,有时会发现__PUBLIC__不太一样。

例如说

在开发个论坛,项目在 localhost/bbs/ 下,在模版中使用__PUBLIC__时,会得到/bbs/Public

另外又在开发个博客时,项目在 localhost/blog 下,在模版中使用__PUBLIC__时,却有可能会得到/Public

路径一旦不对那Public下的css,js,img全都挂了。

解决方案一

首先,最简单的就是自己去配置__PUBLIC__的值,在config.php中

'TMPL_PARSE_STRING' => array(  '__PUBLIC__' => '/blog/Public',
);  

但这是个问题啊,不能逃。

解决方案二

于是只好去分析下源码了(谈不上分析,简单得很)

在 ContentReplaceBehavior.class.php 文件中找到__PUBLIC__的定义
line 48:

'__PUBLIC__'    =>  __ROOT__.'/Public',// 站点公共目录  

/Public是没错的,于是问题导向__ROOT__
line 41:

'__ROOT__'      =>  __ROOT__,       // 当前网站地址  

再往上找,在runtime.php文件中找到__ROOT__的源定义

line 49-57

if(!defined('__ROOT__')) {  // 网站URL根目录  if( strtoupper(APP_NAME) == strtoupper(basename(dirname(_PHP_FILE_))) ) {  $_root = dirname(dirname(_PHP_FILE_));  }else {  $_root = dirname(_PHP_FILE_);  }  define('__ROOT__',   (($_root=='/' || $_root=='\\')?'':$_root));
}  

直接看出玄机来了。
如果说 APP_NAME 和 入口文件的路径的名字相同的话 $_root将会两遍 dirname 入口 文件。

也就是说,APP_NAME(入口文件中配置项)如果和二级目录名相同的话,将会直接取到主机名。

如上的blog, $_root会先取 /blog,然后再取成/或(看系统),最后再判断后定义 ($_root=='/' || $_root=='\\')?'':$_root)
结论
所以大家如果在二级目录部署基于thinkphp项目时,要保证APP_NAME或二级目录名是不一样的!不然__PUBLIC__会让你疼一会。

转载于:https://www.cnblogs.com/andyxq/p/7217137.html

关于ThinkPHP框架项目在二级目录时,__PUBLIC__路径的问题相关推荐

  1. vue项目nginx部署子目录_vue 多项目部署---二级目录

    新项目:同一域名下部署多个vue项目, 根目录vue项目不需要按下面的方式进行打包部署 https://www.bitedit.com/ 下面三个项目以二级目录部署 https://www.bited ...

  2. TP5项目放在二级目录下重定向访问不对问题

    最近用Thinkphp5做了一个小网站,发现当PHP版本切换成5.5以上版本后 如果访问地址是全地址 如loacalhost/index/index/index重定向不起作用,提示:No input ...

  3. 阿里云虚拟主机部署TP5项目绑定二级目录解决办法

    TP5项目上传到虚拟主机使用Linux系统后,域名默认访问的空间根目录, 大多虚拟主机都是不能修改网站根目录的.可以通过.htaccess来实现. Apache主机一般支持.htaccess伪静态,即 ...

  4. springfox-swagger-ui 在二级目录下的路径问题

    本文解决 springfox-swagger-ui 在二级目录下的使用问题.如同一个域名的 /user 和 /post 用 Nginx 分别反向代理指向不同的应用,我们希望在每个应用中都可以正常使用 ...

  5. ThinkPHP框架学习(二)

    在上一节中,我主要讲到了如何获取ThinkPHP框架,以及虚拟目录和虚拟主机的配置.准备工作完成之后,就可以利用ThinkPHP去部署项目了. 先在工作目录(D:/zend/workspace)下新建 ...

  6. php tp框架调用方法,thinkPHP框架使用方法

    title: thinkPHP框架使用方法 date: 2018-01-05 20:30:44 tags: 1. thinkPHP思想 thinkPHP基于MVC思想,MVC是一种设计模式,他强制的使 ...

  7. vue配置二级目录vue-axios跨域办法谷歌浏览器设置跨域

    一.根据官方建议,dist打包的项目文件放在服务器根目录下,但是很多时候,我们并不能这样做,当涉及到二级目录设置多层深埋的时候,就需要在webpack配置文件里去设置一下了. 在webpack.con ...

  8. 渗透测试-ThinkPHP框架漏洞总结

    ThinkPHP框架漏洞总结 文章目录 ThinkPHP框架漏洞总结 前言 Thinkphp简介 Thinkphp本地安装 Thinkphp本地复现 验证poc 写入一句话 Vulhub-Thinkp ...

  9. html点击打开二级目录是什么意思,网站二级目录有什么用 为什么要用二级目录...

    1.二级目录的内容建设也需要细化 很多人认为优化二级目录不如优化顶级域名,只是发送外链,但这是错误的做法.我们的目标是将二级目录优化到首页,这样用户就可以看到,如果我们的二级目录内容很少或者次等,就会 ...

  10. Nginx 二级目录部署Vue2

    Nginx 二级目录部署Vue2 nginx 服务器上 /xxxxx 是二级目录是对访问路径匹配 location /xxxx {root /public/app/dist;index index.p ...

最新文章

  1. php mysql网站导航跳转_PHP微信公众平台跳转网页实现定位思路 By:阿尚
  2. Windows Server 2008 R2 如何启动内核调试
  3. 弹性盒子内容体居右对其_弹性盒子侧轴对齐方式
  4. C++程序的单元测试
  5. java 封装的概念_java封装的概念
  6. C++ RTTI 简介
  7. 机械工程专业英语复习
  8. 如何建设软件质量保障体系
  9. 截图工具FastStone Capture
  10. 记录一个小程序 input输入框格式手机号方法
  11. 浅谈canvas绘画王者荣耀--雷达图
  12. audio或video标签的autoplay属性的说明
  13. 在使用firefly的RK3308的SDK使用buildroot构造文件系统时,遇到OEM分区和userdata不能挂在成功的问题
  14. 计算机主机如何睡眠,win7怎样设置电脑休眠_w7电脑设置休眠的详细步骤
  15. java实训报告前言_Java学习第一阶段总结
  16. 面试官:为啥要axios 的二次封装呢 及其使用是干啥的
  17. 【Retrofit】Retrofit的源码解析
  18. 麻省理工学院计算机工程专业排名,麻省理工学院计算机科学与工程世界排名2018年最新排名第1(ARWU世界排名)...
  19. 吐血整理!java跑批任务防止重复
  20. 【问题已解决】无法定位程序输入点XXX于动态链接库xxxxxx

热门文章

  1. 互联网项目架构经验分享
  2. 工行基于MySQL构建分布式架构的转型之路
  3. 年薪 40w 的应届生
  4. 集合python_Python 集合
  5. 2、HTML 元素属性
  6. Java基础(静态static)
  7. 23种设计模式之适配器模式代码实例
  8. sql语句分页多种方式ROW_NUMBER()OVER
  9. android 数据存储之 Shared Preferences
  10. Codeforces Round #159 (Div. 2)