[英]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://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.