绑定二级目录的解决方法(如thinkphp框架里面的public目录)

我们在搭建部分thinkphp框架的网站的时候,要求绑定的网站的目录是/public/目录,而不是根目录

如果是宝塔服务器里面还好,可以直接设置网站运行目录,或者把域名绑定到二级目录里面。

但是虚拟主机,只能绑定根目录是web目录,没有选择,这时候,我们就用到使用.htaccess来绑定/public/了。

方法:在根目录下面新建.htaccess,把下面的内容,复制进去,即可访问。

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteBase /
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1?Rewrite [L,QSA]
</IfModule>

好了,虚拟主机绑定二级目录的方法就介绍到这里了,本人亲自测试没有问题,如你你也这个需求的话,按照本方法操作即可。

 

thinkphp伪静态,二级目录伪静态 

2020-3-11 10:52 Wednesday

location / {
 if (!-e $request_filename){
  rewrite  ^(.*)$  /index.php?s=$1  last;   break;
 }
}

#根目录下en目录下面的伪静态规则
location /en/ {
 if (!-e $request_filename){
  rewrite  ^/en/(.*)$  /en/index.php?s=$1  last;   break;
 }
}

 

如何把thinkphp安装到二级目录  下面应该试用于thinkphp3

define('THINK_PATH', './test/ThinkPHP/');
define('APP_NAME',  'Admin');
define('APP_PATH',  './Admin/');
require_once THINK_PATH.'ThinkPHP.php';

 

 

 

[ThinkPHP 3.1.3]

__PUBLIC__解析的问题

在二级目录下开发基于ThinkPHP项目,有时会发现__PUBLIC__不太一样。

例如说

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

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

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

解决方案一

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

 

 
  1. 'TMPL_PARSE_STRING' => array(

  2. '__PUBLIC__' => '/blog/Public',

  3. );

 

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

解决方案二

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

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

line 48:

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

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

line 41:

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

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

line 49-57

 
  1. if(!defined('__ROOT__')) {

  2. // 网站URL根目录

  3. if( strtoupper(APP_NAME) == strtoupper(basename(dirname(_PHP_FILE_))) ) {

  4. $_root = dirname(dirname(_PHP_FILE_));

  5. }else {

  6. $_root = dirname(_PHP_FILE_);

  7. }

  8. define('__ROOT__', (($_root=='/' || $_root=='\\')?'':$_root));

  9. }

 

直接看出玄机来了。

如果说 APP_NAME 和 入口文件的路径的名字相同的话 $_root将会两遍 dirname 入口 文件。

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

如上的blog, $_root会先取 /blog,然后再取成/或\(看系统),最后再判断后定义

 

($_root=='/' || $_root=='\\')?'':$_root)


 

 

结论

所以大家如果在二级目录部署基于thinkphp项目时,要保证APP_NAME或二级目录名是不一样的!不然__PUBLIC__会让你疼一会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值