侧边栏壁纸

Typecho如何设置多域名,如何解决多域名下静态资源跨域报错问题。

2022年09月07日 371阅读 4评论 0点赞

前言

今天把ssl添加上,上一次过期到现在已经过去三个月了,宝塔免费的白嫖不了就用腾讯云的吧,因为网站系统是typecho的,所以还稍稍折腾了一会。

一、如何给Typecho网站设置多域名

如果您的网站没有CDN,可能只需要以下设置就完事了。

方法① 301重定向
说白了就是让你的子域名硬跳转到主站。
首先打开文件(宝塔面板可直接在网站重定向面板上设置)

vi /etc/nginx/sites-enabled/domain.com.conf

然后写入

server {
    listen xxx.xxx.xxx.xxx:xx; //你的IP:端口
    server_name domain.com;  //被重定向域名
    return 301 http://orgindomain.com$request_uri; //向源站重定向(带目录请求)
}

这个方法实在是下策,对seo优化和打开速度都不友好,不是很推荐。

方法② 修改Typecho配置文件

在Typecho网站根目录下 config.inc.php 中 , 找到

Typecho_Db::set($db);

这句话,在其后写上:

Helper::options()->siteUrl='http://www.domain.com';//您的子站点

方法③ 修改Typecho框架文件

在网站根目录下 /var/Widget/Options.php 中,找到

/** 初始化站点信息 */
if (defined('__TYPECHO_SITE_URL__')) {
    $this->siteUrl = __TYPECHO_SITE_URL__;
} else if (defined('__TYPECHO_DYNAMIC_SITE_URL__') && __TYPECHO_DYNAMIC_SITE_URL__) {
    $this->siteUrl = $this->rootUrl;
}

在它的前面加上:

if($_SERVER['SERVER_NAME']=='www.orgindomain.com'){ //判断地址栏域名
    $this->siteUrl = 'http://www.orgindomain.com';  //将站点总体域名替换为地址栏域名
}

以上方法对大多Typecho网站都适用。
可是,由于我加了CDN,源站和子站即使是同一个项目,也不会被允许,依旧存在跨域问题。

如何解决跨域问题

这时候有一个非常好的办法。
在做兼容多站点时,我在Typecho的框架 /var/Widget/Options.php 中发现这样一段话:

if (defined('__TYPECHO_SITE_URL__')) {
    $this->siteUrl = __TYPECHO_SITE_URL__;
} else if (defined('__TYPECHO_DYNAMIC_SITE_URL__') && __TYPECHO_DYNAMIC_SITE_URL__) {
    $this->siteUrl = $this->rootUrl;
}

这个 TYPECHO_DYNAMIC_SITE_URL 引起了我的注意。经过测试,我发现:
在Typecho网站根目录下 config.inc.php 中,

/** 用户中心(相对路径) */
define('__TYPECHO_USER_DIR__', '/user/');

后面加上

/**开启动态域名/跨域补救**/
define('__TYPECHO_DYNAMIC_SITE_URL__',true);
结尾

即可完美解决网站资源跨域问题!
目前我的个人站: 毒蛊博客
和子站点:毒蛊博客1
都能够完美访问了!

0

—— 评论区 ——

昵称
邮箱
网址
取消
  1. 头像
    笔记堡
    Android 12   Google Chrome
    回复

    其实在网站的config.php里面添加最后一步就行了,开启动态域名补救。

    1. 头像
      毒蛊博客 博主
      Android 12   QQ 浏览器
      回复
      @笔记堡

      腻害腻害,不愧是大佬

  2. 头像
    毒蛊博客 博主
    Windows 10   Microsoft Edge
    回复

    看看

  3. 头像
    回复

    感谢分享,赞一个

人生倒计时
最新评论