我正在使用codeigniter创建一个SaaS Web应用程序,并且我正在尝试根据子域是否存在来确定如何路由到特定控制器。
目前我已经这样了,如果你输入一个subdomain.example.com
的网址,我的默认控制器会检查数据库中是否存在网址中的子网域,如果不存在,则会显示错误页面。
public function __construct()
{
parent::__construct();
$subdomain_arr = explode('.', $_SERVER['HTTP_HOST'], 2); //creates the various parts
$subdomain_name = $subdomain_arr[0]; //assigns the first part
//echo "subdomain_name = $subdomain_name";
// if the subdomain does not exist, redirect to error page
if(!$this->subdomainExists($subdomain_name)) {
redirect('error/index');
} else {
$this->subdomain = $subdomain_name;
}
}
这适用于用户输入子域名的网址,但现在如果用户输入的网址没有example.com
等子域名,我希望使用不同的控制器。
实现这一目标的最佳方法是什么?我正在考虑做以下事情,但每次有人去example.com
时都不会发生重定向。
// if no subdomain was entered, redirect to controller 'aDifferentController'
// else if a subdomain was entered, check that it exists in the database and if not redirect to an error page.
if(the url entered does not contain a subdomain) {
redirect('aDifferentController');
} else if(!$this->subdomainExists($subdomain_name)) {
redirect('error/index');
} else {
$this->subdomain = $subdomain_name;
}
答案 0 :(得分:3)
为什么不根据子域有条件地声明路由。
在routes.php中,执行此操作
if (strstr($_SERVER['HTTP_HOST'], 'some-subdomain.mydomain.com')) {
$route['uristring'] = "controller/method";
}
答案 1 :(得分:0)
您需要弄清楚最可能的情况是什么,更多人可能会访问子域名,他们是否更有可能进入主站点?
如果他们更有可能进入主站点,那么请检查子域是否存在,如果 然后重定向到另一个控制器,否则继续。
如果他们更有可能进入子域,那么检查子域是否存在,如果不然后重定向到另一个控制器,否则继续。
另一个选项(在我看来可能更好)是在使用.htaccess甚至命中代码点火器之前进行重定向,但这取决于你对服务器的访问级别。