关于ThinkPHP框架项目在二级目录时,__PUBLIC__路径的问题
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__路径的问题相关推荐
- vue项目nginx部署子目录_vue 多项目部署---二级目录
新项目:同一域名下部署多个vue项目, 根目录vue项目不需要按下面的方式进行打包部署 https://www.bitedit.com/ 下面三个项目以二级目录部署 https://www.bited ...
- TP5项目放在二级目录下重定向访问不对问题
最近用Thinkphp5做了一个小网站,发现当PHP版本切换成5.5以上版本后 如果访问地址是全地址 如loacalhost/index/index/index重定向不起作用,提示:No input ...
- 阿里云虚拟主机部署TP5项目绑定二级目录解决办法
TP5项目上传到虚拟主机使用Linux系统后,域名默认访问的空间根目录, 大多虚拟主机都是不能修改网站根目录的.可以通过.htaccess来实现. Apache主机一般支持.htaccess伪静态,即 ...
- springfox-swagger-ui 在二级目录下的路径问题
本文解决 springfox-swagger-ui 在二级目录下的使用问题.如同一个域名的 /user 和 /post 用 Nginx 分别反向代理指向不同的应用,我们希望在每个应用中都可以正常使用 ...
- ThinkPHP框架学习(二)
在上一节中,我主要讲到了如何获取ThinkPHP框架,以及虚拟目录和虚拟主机的配置.准备工作完成之后,就可以利用ThinkPHP去部署项目了. 先在工作目录(D:/zend/workspace)下新建 ...
- php tp框架调用方法,thinkPHP框架使用方法
title: thinkPHP框架使用方法 date: 2018-01-05 20:30:44 tags: 1. thinkPHP思想 thinkPHP基于MVC思想,MVC是一种设计模式,他强制的使 ...
- vue配置二级目录vue-axios跨域办法谷歌浏览器设置跨域
一.根据官方建议,dist打包的项目文件放在服务器根目录下,但是很多时候,我们并不能这样做,当涉及到二级目录设置多层深埋的时候,就需要在webpack配置文件里去设置一下了. 在webpack.con ...
- 渗透测试-ThinkPHP框架漏洞总结
ThinkPHP框架漏洞总结 文章目录 ThinkPHP框架漏洞总结 前言 Thinkphp简介 Thinkphp本地安装 Thinkphp本地复现 验证poc 写入一句话 Vulhub-Thinkp ...
- html点击打开二级目录是什么意思,网站二级目录有什么用 为什么要用二级目录...
1.二级目录的内容建设也需要细化 很多人认为优化二级目录不如优化顶级域名,只是发送外链,但这是错误的做法.我们的目标是将二级目录优化到首页,这样用户就可以看到,如果我们的二级目录内容很少或者次等,就会 ...
- Nginx 二级目录部署Vue2
Nginx 二级目录部署Vue2 nginx 服务器上 /xxxxx 是二级目录是对访问路径匹配 location /xxxx {root /public/app/dist;index index.p ...
最新文章
- php mysql网站导航跳转_PHP微信公众平台跳转网页实现定位思路 By:阿尚
- Windows Server 2008 R2 如何启动内核调试
- 弹性盒子内容体居右对其_弹性盒子侧轴对齐方式
- C++程序的单元测试
- java 封装的概念_java封装的概念
- C++ RTTI 简介
- 机械工程专业英语复习
- 如何建设软件质量保障体系
- 截图工具FastStone Capture
- 记录一个小程序 input输入框格式手机号方法
- 浅谈canvas绘画王者荣耀--雷达图
- audio或video标签的autoplay属性的说明
- 在使用firefly的RK3308的SDK使用buildroot构造文件系统时,遇到OEM分区和userdata不能挂在成功的问题
- 计算机主机如何睡眠,win7怎样设置电脑休眠_w7电脑设置休眠的详细步骤
- java实训报告前言_Java学习第一阶段总结
- 面试官:为啥要axios 的二次封装呢 及其使用是干啥的
- 【Retrofit】Retrofit的源码解析
- 麻省理工学院计算机工程专业排名,麻省理工学院计算机科学与工程世界排名2018年最新排名第1(ARWU世界排名)...
- 吐血整理!java跑批任务防止重复
- 【问题已解决】无法定位程序输入点XXX于动态链接库xxxxxx