虚拟主机部署ThinkPHP项目设置public目录方法

  ThinkPHP默认必须要设置public目录为运行目录才可以成功运行项目,但是如果使用的是虚拟主机无法设置运行目录怎么办?而最稳妥的方法是移动public目录到根目录并修正路径。

  先看 TP8 原版 public/index.php

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2019 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

// [ 应用入口文件 ]
namespace think;

require __DIR__ . '/../vendor/autoload.php';

// 执行HTTP应用并响应
$http = (new App())->http;

$response = $http->run();

$response->send();

$http->end($response);

  问题:

  __DIR__.'/../vendor/autoload.php'

  这里的../表示返回上一级,虚拟主机把入口放到根目录后,不能用../了。

  TP8虚拟主机部署:

  第1步:移动文件

  把项目里的

  public/index.php

  public/.htaccess

  public/static

  全部移动到虚拟主机根目录(wwwroot)

  移动后目录结构变成:

wwwroot/
├── index.php       (原来 public 里的)
├── .htaccess       (原来 public 里的)
├── static/         (原来 public 里的)
├── app/
├── vendor/
├── config/
├── route/
└── ...

  第2步:修改根目录的index.php

  把刚才的代码,只改一行:

  把

require __DIR__ . '/../vendor/autoload.php';

  改成

require __DIR__ . '/vendor/autoload.php';

  修改后的TP8根目录index.php

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2019 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

// [ 应用入口文件 ]
namespace think;

require __DIR__ . '/vendor/autoload.php';

// 执行HTTP应用并响应
$http = (new App())->http;

$response = $http->run();

$response->send();
$http->end($response);

  就改了这一句:

  /../vendor/→/vendor/

  第3步:根目录放.htaccess(Apache虚拟主机)

  直接在根目录新建/覆盖.htaccess:

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>

  现在直接访问:

  http://你的域名/

  就能正常打开TP8网站,样式、路由、控制器全部正常。

  如果你是IIS服务器(用这个web.config)

  根目录新建web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ThinkPHP" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

  最常见的2个问题

  页面空白/报错500:给runtime目录权限设为755或777

  CSS/JS图片不显示:确认static文件夹已经移到根目录

本站原创内容,转载请注明来源:https://www.liutonghui.com/243

解决 PHP 8.1 隐式类型转换导致缩略图生成错误
上一篇 2023-09-04
织梦者博客十周年,启用全新域名
下一篇 2023-10-02

评论列表(0条)

  • 暂无评论

发表评论

captcha

相关推荐

  • 鱼缸氧泵过滤器不工作的解决方法

      本人养了四条黑玛丽、四条红箭、两条金十字共十条热带鱼,前段时间刚换了个新的水族箱,一天下班回来之后发现氧泵不好使了,插电之后没有任何反应,因为水位高过氧泵,不可能是烧坏了,于是准备拆开研究一下,如图所示,把氧泵卸来,拔掉下面抽水的管,稍用力掰开图一所示的位置。 (图一)   图二所示,可以看到抽水的螺旋桨,考虑到可能是这里面卡住了埋汰的东西导致电机无法带动起来,把螺旋桨对着水龙头边冲洗边转动一会,然后从新安装后,插上电,立即......

    2017-04-22
    31880
  • Thinkphp6开发Tinymce图片上传接口的方法

      Tinymce是项目开发中常用的编辑器之一,它的功能非常强大,界面简洁,又支持各种各样功能强大的插件,本文介绍一下ThinkPHP6开发Tinymce图片上传接口的方法。 public function uploads(){ $file = request()-&gt;file('file'); // 上传到本地服务器 $savename = \think\facade\Filesystem::disk('p......

    2021-03-02
    18610
  • ThinkPHP6开发wangEditor图片上传接口的方法

      wangEditor是一款近几年非常流行的富文本编辑器,它界面简洁,功能非常强大,本文介绍WangEditor图片上传接口的开发,以Thinkphp6为例。   首先看一下wangEditor官方的接口返回要求:   然后开发Thinkphp6的上传功能: public function testup(){ $file = request()-&gt;file('file'); $savename = \think......

    2021-03-02
    19010
  • TinyMCE编辑器配置正确但是不显示的解决方法

      最近在给本站的后台功能做一次整体调整,在将 TinyMCE 富文本编辑器引入到页面表单时却不显示编辑器主体,反复检查确认了代码配置没有任何问题。在经过一番研究发现,由于表单页面是通过 iframe 引入到主体框架中的,这些表单页面并没有 &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; 等 HTML 元素,而 TinyMCE 没有获取到这些元素就认为这不是一个 HTML 页面,因此无法加......

    2023-04-16
    11130
  • ThinkPHP文件上传类FileSystem自定义生成年月日目录

      FileSystem 是一个非常好用的文件上传扩展类,结合 Thinkphp 使用可以轻松的完成文件上传功能的开发。但是默认情况下 FileSystem 是按照&ldquo;年月日&rdquo;来生成上传日期目录的,长期使用下来就会有大量的&ldquo;Ymd&rdquo;目录,不方便管理,像我平时更新内容不多,如果以&ldquo;Ym&rdquo;的格式生成目录,按同一年同一月上传的文件放在一个日期目录中就方便管理多了。   需要......

    2023-04-23
    10342
  • ThinkPHP多入口文件多应用设置方法

      在使用ThinkPHP做项目开发时,为了让架构更清晰科学,提高安全和性能,方便维护,需要将多应用分配到各自对应的不同的入口文件上,而不是整个项目用一个入口文件。   此方法适用于ThinkPHP6/8,这是ThinkPHP默认的单应用结构: ├─app 应用目录 │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─view 视图目......

    2024-03-31
    8280
  • ThinkPHP获取数据库类型和版本的方法

      在开发后台功能时,可能会需要自动获取当前使用的数据库类型和版本的情况,下面就举个简单的例子实现自动获取当前项目使用的是MySQL还是SQLite数据库及使用的相应数据库版本的方法: // 数据库类型 $default = config('database.default'); $config = config('database.connections.' . $default); $db_type = strtolower(tri......

    2024-11-02
    8890
  • ThinkPHP路由简单配置

      ThinkPHP拥有丰富的路由配置功能,灵活的配置路由可以更好的优化URL结构,方便维护,下面简单介绍一下ThinkPHP路由配置方法。   ThinkPHP默认路由结构为/入口文件/应用/控制器/方法,因此就产生了这样一长串的URL结构: https://127.0.0.2/index.php/index/index/index   这还仅仅是首页URL,这样的结构显然不利于维护,更不利于SEO,所以需要做路由配置,以多应用为例,......

    2025-04-21
    7480