繁体   English   中英

CodeIgniter路由 - 更改为处理子域?

[英]CodeIgniter Routing - changing to handle a subdomain?

我的网站是在CodeIgniter中构建的。 网址格式是

domain.com/lang/id/descriptive-text 

例如

domain.com/en/12/article-on-codeigniter-routing

一个特定页面(Tours)具有要显示的所有巡回信息(根据id号检索)。 但是,我现在有一个用Ruby on Rails编写的预订系统,我需要整合。 这样做的方法是必须有一个名为booking.domain.com的子域,并且每个游览页面都显示在该子域上,以便页面预订系统可以正常运行。

这意味着在ruby中编写Tours页面并从codeigniter传入信息。 我知道页面是Tour还是其他页面的方式是Tour页面的id大于20但小于40。

以下是我目前的路由代码:

$route['default_controller'] = "content";
$route['en/(:num)/(:any)'] = "content/en/$1";
$route['de/(:num)/(:any)'] = "content/de/$1";
$route['es/(:num)/(:any)'] = "content/es/$1";
$route['it/(:num)/(:any)'] = "content/it/$1";

我的问题是我如何改变它现在反映这一新变化? 我不知所措。

谢谢

解决方案 (无需修改CodeIgniter)

使用.htaccess进行重定向。

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteRule    ^([^/]+)/([20][0-9]|[30][0-9]|[40]+)/([^/]+)?$    http://sub.maindomain.foo/$1/$2/$3    [L]
</ifModule>

如果URL模式与规则匹配,这将重定向到子域

id大于20但小于40

如果您的主域和子域具有相同的URL模式,

http://maindomain.foo/en/30/article-on-codeigniter-routing

将自动重定向到

http://sub.maindomain.foo/en/30/article-on-codeigniter-routing

如果您没有像子域一样的id范围,可以试试这个

$route['default_controller'] = "content";

$route['(.+)'] = function ( $params ){
                        $param = explode("/", $params);
                        if(20 >= (int) $param[1] =< 40){
                            return "subdomain";
                        }
                        else{
                            return "content/" . $param[0] . "/" . $param[1];
                        }
                    };

我可能在这里很愚蠢 - 但是不是修改你的控制器并执行以下操作的解决方案吗?

public function content($lang,$id){
    if ($id > 20 && $id < 40){
        $post = base64_encode(serialize($post));
        redirect('subdomain.domain.com/'.$lang.'/'.$id.'/'.$post);
    } else {
        // carry on processing ....
    }
}

我根据您发布数据的查询修改了我的答案。 我已经对它进行了序列化和base64编码。 要对它进行反序列化,你需要https://github.com/jqr/php-serialize (我不是红宝石专家所以对此一无所知)而且从研究中我相信你需要Base64.decode64()来进行base64解码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM