Codeigniter - 如何根据子域是否存在来路由控制器

时间:2011-12-27 22:17:48

标签: php codeigniter

我正在使用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;
}

2 个答案:

答案 0 :(得分:3)

为什么不根据子域有条件地声明路由。

在routes.php中

,执行此操作

if (strstr($_SERVER['HTTP_HOST'], 'some-subdomain.mydomain.com')) {
 $route['uristring'] = "controller/method";
}

答案 1 :(得分:0)

您需要弄清楚最可能的情况是什么,更多人可能会访问子域名,他们是否更有可能进入主站点?

如果他们更有可能进入主站点,那么请检查子域是否存在,如果 然后重定向到另一个控制器,否则继续。

如果他们更有可能进入子域,那么检查子域是否存在,如果然后重定向到另一个控制器,否则继续。

另一个选项(在我看来可能更好)是在使用.htaccess甚至命中代码点火器之前进行重定向,但这取决于你对服务器的访问级别。