thinkcmf5.1默认是public目录,但是部署到虚拟主机安装步骤不能放在public目录,而是所有文件部署到主机根目录,目录结构需要修改,下面教大家怎么修改并部署到阿里云之类虚拟主机。
方法一:(直接利用伪静态文件 .htaccess 重写路由)
1. 在根目录新起个 .htaccess 文件,
2. 往新建的文件里面写入以下内容:
apache
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L,QSA]
</IfModule>
nginx
location / {
index index.php index.html index.htm;
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if (!-e $request_filename)
{
#地址作为将参数rewrite到index.php上。
#rewrite ^/(.*)$ /index.php?s=$1;
#若是子目录则使用下面这句,将subdir改成目录名称即可。
rewrite ^/public/(.*)$ /public/index.php?s=$1;
}
}
location /api/ {
index index.php index.html index.htm;
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if (!-e $request_filename)
{
#地址作为将参数rewrite到index.php上。
#rewrite ^/(.*)$ /index.php?s=$1;
#若是子目录则使用下面这句,将subdir改成目录名称即可。
rewrite ^/api/(.*)$ /api/index.php?s=$1;
}
}
3. 刷新直接访问即可
4.还是访问不了, 那么就是 public 下面的.htaccess 有问题, (此种方法, 路由中会多出个 /public )
方法二(推荐):(移动 public 目录下的文件,并修改index.php 及 api.php 的内容)
1. 把public里面的文件全部移动都根目录,
2. 找到 index.php 和 api.php 里的 "define('CMF_ROOT', dirname(__DIR__) . '/');" 修改为 "define('CMF_ROOT', __DIR__ . '/thinkcmf/'); "
3. api.php的还要把 "require __DIR__ . '/../vendor/thinkphp/base.php;" 改为 "require CMF_ROOT . 'vendor/thinkphp/base.php';"
4.将除public下文件和目录,所有app目录和api目录,vendor目录,统一放到thinkcmf目录里
5. 刷新访问即可.


index.php入口文件内容如下:
<?php
namespace think;
// [ 入口文件 ]
// 调试模式开关
define('APP_DEBUG', true);
// 定义CMF根目录,可更改此目录
define('CMF_ROOT', __DIR__ . '/thinkcmf/');// ayumi改过了
// 定义CMF数据目录,可更改此目录
define('CMF_DATA', CMF_ROOT . 'data/');
// 定义应用目录
define('APP_PATH', CMF_ROOT . 'app/');
// 定义网站入口目录
define('WEB_ROOT', __DIR__ . '/');
// 加载基础文件
require CMF_ROOT . 'vendor/thinkphp/base.php';
// 执行应用并响应
Container::get('app', [APP_PATH])->run()->send();
api.php 入口文件内容如下:
<?php
namespace think;
// [ 入口文件 ]
// 调试模式开关
define('APP_DEBUG', true);
// 定义CMF根目录,可更改此目录
define('CMF_ROOT', __DIR__ . '/thinkcmf/');// ayumi改过了
// 定义CMF数据目录,可更改此目录
define('CMF_DATA', CMF_ROOT . 'data/');
// 定义应用目录
define('APP_PATH', CMF_ROOT . 'api/');
// 定义路由目录
define('ROUTE_PATH', APP_PATH . 'route.php');
// 定义配置目录
define('CONFIG_PATH', CMF_ROOT . 'data/config/');
// 定义命名空间
define('APP_NAMESPACE', 'api');
// 定义网站入口目录
define('WEB_ROOT', __DIR__ . '/');
// 加载基础文件
require CMF_ROOT . 'vendor/thinkphp/base.php';
// 执行应用并响应
Container::get('app', [APP_PATH])->run()->send();
伪静态保持原来不变;
apache
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^api/?(.*)$ api.php?s=$1 [QSA,PT,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
</IfModule>
nginx:
location / {
index index.php index.html index.htm;
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if (!-e $request_filename)
{
#地址作为将参数rewrite到index.php上。
#若是子目录则使用下面这句,将subdir改成目录名称即可。
rewrite ^(.*)$ /index.php/$1 last;
}
}
location /api/ {
index index.php index.html index.htm;
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if (!-e $request_filename)
{
#地址作为将参数rewrite到index.php上。
#若是子目录则使用下面这句,将subdir改成目录名称即可。
rewrite ^/api/(.*)$ /api.php?s=$1 last;
}
}


