typecho 修改 siteUrl

修改 typecho 源码 使之支持多个域名, 并且 全站链接 保持与域名一致.

1. 存储位置

typecho_options 表中 siteUrl 字段存储着 本站域名,
所有本站链接 都用它作为 根路径的.

想换域名的话, 简单的修改这个字段就行了.

但是当有多个域名时, 想要每个域名内的 链接 都正常的话, 需要修改 typecho 源码了.

2. 相关代码

typecho 中所有 使用 siteUrl 的地方 都是通过 Widget_Options 类内一个变量 siteUrl 实现的.

Widget_Options->execute() 中, 它从 数据库 读出 typecho_options 表.

siteUrl 存储进了 Widget_Options->row,

Widget_Options 的 父类 Typecho_Widget 中 通过 __get() __set() 实现
$this->xxx 直接 访问 $this->row['xxx'] 的效果.

所以直接在 Widget_Options 中 print_r($this) 是看不到 siteUrl 的, 但在 $this->row 能看到他们的踪影.

3. 修改代码

Widget_Options->execute()

if($_SERVER['SERVER_NAME']=='note.yurenchen.com'){//chen added
    $this->siteUrl = 'http://note.yurenchen.com';    
}
/** 初始化站点信息 */
$this->siteUrl = Typecho_Common::url(NULL, $this->siteUrl);
$this->plugins = unserialize($this->plugins);

end

现在 note.yurenchen.comyurenchen.sinaapp.com 都可以访问本站了.
前者 会解析到 海外服务器, 后者则是 国内服务器.

标签:typecho php

已有 8 条评论

  1. 我想问下具体修改那个文件啊

    1. 现在评论应该ok了~

      1. 这个文章稍后会转载下,文章会留有你的链接,不介意吧

        1. 欢迎转载
          O(∩_∩)O哈哈~

          ps: 这个站 评论邮件 插件 迁移时忘了装, 带了的不便还请谅解, 抽空装上

          1. 转完你的文章后有人给我了个简单的方法,特来分享一下。在config.inc.php中定义Helper::options()->siteUrl='http://另一个网址';

        2. O(∩_∩)O谢谢~
          typecho 的 代码我没怎么看全,
          Helper::options() 可能是 给插件开发 留的接口类
          好多东西 都可以做成插件 避免改核心代码的
          (只是我比较懒的去看)

  2. 博主,请教一下Tag标签的URL格式应该怎样修改呢? 目前默认的格式是/tag/标签名ASCII码/ 我想修改成比较简单的“/tag-数字”之类的格式。

    1. typecho 有一个叫 "路由助手" 的插件, 里面可以设置 各页面路径的格式:

      RoutesHelper 路由助手 1.0.1 doudou

      //typecho 官网 应该还能找到

添加新评论