Codeigniter 重新路由后未加载默认控制器
我有一个codeigniter Multistae安装,在那里我有这样的代码,我可以为网站提供这样的链接 site.com/sites/sitename/controller/function/vars site.com/controller/function/vars/ subdom.site.com/controller/function/vars 挑战就在这里,路线在哪里Codeigniter 重新路由后未加载默认控制器,codeigniter,codeigniter-url,Codeigniter,Codeigniter Url,我有一个codeigniter Multistae安装,在那里我有这样的代码,我可以为网站提供这样的链接 site.com/sites/sitename/controller/function/vars site.com/controller/function/vars/ subdom.site.com/controller/function/vars 挑战就在这里,路线在哪里 $route['sites/([^/]+)/(.*)'] = '$2'; $route['default_contro
$route['sites/([^/]+)/(.*)'] = '$2';
$route['default_controller'] = "content";
我开始像这样处理链接
site.com/sites/sitename/controller/function/vars
site.com/controller/function/vars
当我去看电影的时候
www.site.com/sites/sitename/
默认控制器未加载
我创建了config.php,以便在访问链接时,考虑到链接结构
site.com/sites/sitename/controller/function/vars
然后
如果我去
site.com/controller/function/vars
然后
$config['base_url']=”http://site.com/";
对于第二种情况,默认控制器完全加载。对于子网站情况,不/
我只有404
怎么办
更新2:
我有一个多文件夹设置
当用户转到www.site.com/sites/site\u name时
然后是一个应用程序文件夹
/已加载根文件夹/用户站点/站点名称
当用户访问site.com/controller/function/var1/var2时
默认的应用程序文件夹是
/根文件夹/应用程序已加载
当用户转到sub1.site.com应用程序文件夹时
/根文件夹/域/子1\u站点\u com已加载
所以当我进入地址栏时
它应该像没有URI一样。并且应该加载默认控制器
// Application folder loading code
$myApp = '';
if($_SERVER['SERVER_ADDR']=='127.0.0.1'){
$main_url='site.com';
}
else{
$main_url='site1.com';
}
//echo $main_url;
switch($_SERVER['HTTP_HOST'])
{
case $main_url;
$uri_string=$_SERVER['REQUEST_URI'];
$link_way=explode('/',$uri_string);
if(strlen($uri_string)>6 and $link_way[1]=='sites' ){
//print_r($link_way);
//var_dump($link_way);
//checking if the link goes to usersites and sitename is bigger and =5
if($link_way[1]=='sites' and strlen($link_way[2])>=5){
$myApp='sites/usersites/'.$link_way[2];
define('SITE_ALIAS','1|'.$link_way[2]);
}
elseif($link_way[1]=='sites' and strlen($link_way[2])<5){
exit('Username should be more than 4 chars');
}
}
else{
define('SITE_ALIAS','0|'.str_replace('.','_',$_SERVER['HTTP_HOST']));
$myApp = 'application';
}
break;
default:
$myApp = str_replace('.','_',$_SERVER['HTTP_HOST']);
$myApp=str_replace('www_','',$myApp);
define('SITE_ALIAS','2|'.$myApp);
$myApp='sites/domains/'.$myApp;
}
$application_folder = $myApp;
//应用程序文件夹加载代码
$myApp='';
如果($\u服务器['SERVER\u ADDR']=='127.0.0.1'){
$main_url='site.com';
}
否则{
$main_url='site1.com';
}
//echo$main_url;
交换机($\u服务器['HTTP\u主机']))
{
案例$main_url;
$uri\u string=$\u服务器['REQUEST\u uri'];
$link\u way=分解('/',$uri\u字符串);
如果(strlen($uri_string)>6和$link_way[1]=='sites'){
//打印(链接方式);
//变量转储(链接方式);
//检查链接是否指向usersites,sitename是否更大且=5
如果($link\u-way[1]=='sites'和strlen($link\u-way[2])>=5){
$myApp='sites/usersites/'.$link_-way[2];
定义('SITE_ALIAS','1 |'.$link_way[2]);
}
elseif($link\u-way[1]=='sites'和strlen($link\u-way[2])你问什么还不完全清楚,但这里有一个镜头:
您需要在站点的根目录中创建一个.htaccess
文件(即系统
文件夹所在的文件夹)。在该文件中:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
然后选择文件夹结构:
所以你有了你的控制器文件夹。在其中,为每个站点创建一个文件夹。在每个控制器中创建你的默认控制器(上图中名为content.php)
使用此设置,www.site.com/sites/site1
将从application/controllers/site1/content.php
调用默认控制器(content
),并显示该控制器的索引功能
$uri_string=$_SERVER['REQUEST_URI'];
$way=explode('/',$uri_string);
/// print_r($way);
//echo $way[3];
if($way[1]=="sites" and strlen($way[2])>2 and strlen($way[3])<1){
echo "JAJA ";
$route['sites/:any'] = "content/show_page/home";
}
else{
$route['sites/([^/]+)/(.*)'] = '$2';
}
如果随后要调用site1控制器的其他函数,则URL如下所示:
www.site.com/sites/site1/content/otherFunction
希望这能有所帮助。您似乎在寻找一个具有您要通过的“sitename”的控制器。因此,如果您导航到site.com/sites/my site/
,您的路由会告诉它查找一个名为my site的控制器并运行index方法
路由的值应该是实际控制器/方法对的路径
$route['sites/([^/]+)/(.*)'] = '$2';
应该是
$route['sites/([^/]+)/(.*)'] = 'sites/index/$1/$2';
这是假设索引方法接受站点名称作为站点控制器中的第一个参数。$uri\u string=$\u SERVER['REQUEST\u uri'];
$uri_string=$_SERVER['REQUEST_URI'];
$way=explode('/',$uri_string);
/// print_r($way);
//echo $way[3];
if($way[1]=="sites" and strlen($way[2])>2 and strlen($way[3])<1){
echo "JAJA ";
$route['sites/:any'] = "content/show_page/home";
}
else{
$route['sites/([^/]+)/(.*)'] = '$2';
}
$way=explode('/',$uri_字符串);
///打印(方式);
//echo$way[3];
如果($way[1]==“sites”和strlen($way[2])>2和strlen($way[3])stromdrain感谢您的回答,但我知道如何删除index.php并创建漂亮的链接。我已经编辑了这个问题。现在更清楚了?@DR.GEWA:请查看“更新”@DR.GEWA:这有帮助吗?@DR.GEWA:没有。因为我在路由方面有问题,而不是在加载应用程序文件夹方面。我只需要路由2个roules。1.如果是像www.multi.com/sites/siteX/->>>>>>>>>>>/content/index/2这样的url。如果是www.multi.com/sites/siteX/controller或www.multi.com/sites/siteX/controller/metrod->>>>控制器/方法/还传递变量。此路由将不起作用,因为我的应用程序文件夹中没有任何sites.php控制器
$uri_string=$_SERVER['REQUEST_URI'];
$way=explode('/',$uri_string);
/// print_r($way);
//echo $way[3];
if($way[1]=="sites" and strlen($way[2])>2 and strlen($way[3])<1){
echo "JAJA ";
$route['sites/:any'] = "content/show_page/home";
}
else{
$route['sites/([^/]+)/(.*)'] = '$2';
}