在 Coding Pages 中修改 Typecho 的后台路径

发布于 2018-01-14  548 次阅读


在 Typecho 中的 config.inc.php 文件中有这一个选项:

/** 后台路径 (相对路径) */
define('__TYPECHO_ADMIN_DIR__', '/admin/');

这个选项可以很方便地修改 Typecho 的后台路径,并且与这个选项相关的漏洞已在较新的版本中修复(1.0 依然存在,建议安装最新开发版)。

不过这在 Coding Pages 有点难实现,因为代码仓库不会同步部署后的代码,一般 PHP 程序也不会主动以提交 commit 的方式更新仓库中的代码(如果有插件另说,目前还没有)。

最近在迁移社团网站的时候偶然发现了一个新的方式修改,而且还修改成功了!

正文

方法一

1,下载官方开发版,解压并将一份 Typecho 主程序的后台目录(admin 文件夹)复制到别处。

2,将该文件夹名称重命名为你需要的名称,然后将这个文件夹移回解压后 Typecho 主程序。

3,确认你所重命名的后台文件夹与主程序的 admin 文件夹一致,确认一致后重新打包为 tar.gz 格式上传到 Coding WebIDE 并在 WebIDE 的终端内使用 tar -zxvf 命令解压。

4,在 WebIDE 内修改 install.php 文件,可以看到这行。

/** 后台路径 (相对路径) */
define('__TYPECHO_ADMIN_DIR__', '/admin/');

修改为你刚刚重命名的后台路径,然后通过 WebIDE 提交,推送。

5,开启动态 Pages,选择来源,照常安装,安装完毕后即可删除 admin 文件夹(在 WebIDE 内)。(此时你需要在地址栏手动输入重命名后的地址)

其他选项

可以看到在 install.php 中还有其余的选项,也可以修改,不过一般情况下改了也没用吧。

/** 定义根目录 */
define('__TYPECHO_ROOT_DIR__', dirname(__FILE__));
/** 定义插件目录 (相对路径) */
define('__TYPECHO_PLUGIN_DIR__', '/usr/plugins');
/** 定义模板目录 (相对路径) */
define('__TYPECHO_THEME_DIR__', '/usr/themes');
/** 后台路径 (相对路径) */
define('__TYPECHO_ADMIN_DIR__', '/admin/');
/** 设置包含路径 */
@set_include_path(get_include_path() . PATH_SEPARATOR .
__TYPECHO_ROOT_DIR__ . '/var' . PATH_SEPARATOR .
__TYPECHO_ROOT_DIR__ . __TYPECHO_PLUGIN_DIR__);
/** 载入 API 支持 */
require_once 'Typecho/Common.php';
/** 载入 Response 支持 */
require_once 'Typecho/Response.php';
/** 载入配置支持 */
require_once 'Typecho/Config.php';
/** 载入异常支持 */
require_once 'Typecho/Exception.php';
/** 载入插件支持 */
require_once 'Typecho/Plugin.php';
/** 载入国际化支持 */
require_once 'Typecho/I18n.php';
/** 载入数据库支持 */
require_once 'Typecho/Db.php';
/** 载入路由器支持 */
require_once 'Typecho/Router.php';

注意!!!

install.php 文件中可以看到其他选项可以修改,但请注意!这个方式是一次性的,用了一次就不能再用了!!!(因为 config.inc.php 文件的存在,一般情况下删除即可重装 Typecho,但是在 Coding Pages 里你并没有办法删除这个文件)

否则你需要关闭动态 Pages 功能并重新开启,然后重新安装 Typecho!!!

在安装前请务必确认你需要修改的相关选项。

目测可以靠注释掉这段代码取消安装检查以达到覆盖 config.inc.php 的目的,不过并不推荐这么做:

else:
    require_once dirname(__FILE__) . '/config.inc.php';
    //判断是否已经安装
    $db = Typecho_Db::get();
    try {
        $installed = $db->fetchRow($db->select()->from('table.options')->where('name = ?', 'installed'));
        if (empty($installed) || $installed['value'] == 1) {
            Typecho_Response::setStatus(404);
            exit;
        }
    } catch (Exception $e) {
        // do nothing
    }
endif;

方法二

如果你不想经过这么折磨的过程的话,可以参考我之前的教程:新玩具??如何在 Coding Pages 下运行 PHP 程序

如果你已经上传了 Typecho 主程序的代码,只需下载这个教程仓库内的 config.inc.php 文件,并修改数据库信息和相关选项即可。

同时这个方法也可以解决重复安装的问题,但请注意不要泄露,建议在私有仓库内进行这些操作。

后话

如果你有修改主题等需要,建议直接在 Coding WebIDE 上修改,使用 Typecho 自带的编辑器会让你想哭。

现在银牌会员也可以用动态 Pages 功能了就差 Rewrite 了。

什么时候 Coding Pages 支持自定义 Rewrite 功能呢?

还有 WebIDE 的终端依旧不支持 unzip 命令。。。。。。

本文参与 Coding 征文计划


一个高中生的搞事日常。