前言
今天忽然想起给自己的网站弄一个www的子域名。因为网站系统是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'; //将站点总体域名替换为地址栏域名
}
以上方法对大多网站都适用。
可是,由于我加了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);
即可完美解决网站资源跨域问题!
目前我的个人站:香菜个人站-mdzz.pro
和子站点:https://www.mdzz.pro
都能够完美访问了!