绑定多域名实现子站点的方法
本文来自新浪云用户程汉投稿新浪云应用简称SAE作为国内最早的云应用平台之一,产品深受广大开发者的喜爱,无论是性能还是稳定性都是数一数二的,今天分享一篇SAE绑定多个域名实现类似子站点的功能,本
本文来自新浪云用户程汉投稿
新浪云应用简称 SAE 作为国内最早的云应用平台之一,产品深受广大开发者的喜爱,无论是性能还是稳定性都是数一数二的,今天分享一篇 SAE 绑定多个域名实现类似子站点的功能,本方法仅支持采用唯一入口的网站应用。
所谓唯一入口就是网站的所有请求都通过一个文件进入,目前流行的PHP框架都是采用唯一入口,例如 ThinkPHP 、CI 、Lararel 等所有请求都是通过 index.php 文件进行访问。
首先将需要的域名绑定至应用,这里以 a.com b.com c.com 作为示例,用户的整个访问流程如上图所示,所有请求都通过根目录下的 index.php 进入,index.php 通过判断host_name决定载入哪个入口文件实现类似子站点的功能。
整个应用中文件的目录结构如上图所示 root 表示应用根目录。
实现子站点功能需要URL伪静态支持,我们通过修改 config.yaml 文件开启配置 UrlRewrite ,下面是配置代码
name: aowana.com version: 1 handle: - rewrite: if( path~"^/(.*)$") goto "/index.php?$1 [L, QSA, L]"
这样一来无论是 a.com b.com c.com 下的访问都会进入根目录下的 index.php 文件,既然 index.php 已经接管所有访问,下一步我们通过 index.php 进入分配决定访问哪个子站点,下面是 index.php 代码示例。
<?php # 获取域名 $host = $_SERVER['HTTP_HOST']; # 当前路径 $path = dirname(__FILE__); /* * 通过 $host 重新定义 $path * 域名未定义时禁止访问 */ switch ( $host ) { case 'a.com': $path .= '/a.com'; break; case 'b.com': $path .= '/b.com'; break; case 'c.com': $path .= '/c.com'; break; default : exit('域名未定义,禁止访问!'); break; } # 域名子站点的入口 require( $path . '/home.php' );
通过入口文件控制访问实现类似子站点的功能,是不是很简单。