我有一个codeigniter多站点安装,我有这样的代码,我可以用这样的链接提供网站
site.com/sites/sitename/controller/function/vars site.com/controller/function/vars /
subdom.site.com/controller/function/vars
挑战是,路由
$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
然后
$config['base_url']="http://site.com/sites/sitename";
如果我去
site.com/controller/function/vars
然后
$配置[ 'BASE_URL'] = “http://site.com/”;
对于第二种情况,默认控制器完全加载。对于子网站的情况不是/
我只得到404
怎么办?
更新2:
我有一个多文件夹设置。
当用户访问www.site.com/sites/site_name
时然后是应用程序的文件夹
/ root_folder / usersites / site_name已加载。
当用户访问site.com/controller/function/var1/var2
时默认的应用程序文件夹
/ root_folder / application已加载
当用户转到sub1.site.com应用程序文件夹
时 已加载/ root_folder / domains / sub1_site_com
所以当我进入地址栏时
http://site.com/sites/site_name
它应该没有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;
答案 0 :(得分:1)
你所要求的并不完全清楚,但是还有一个镜头:
您需要在站点的根目录中创建.htaccess
文件(即在system
文件夹所在的文件夹中)。在该文件中:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
请参阅本页的“删除index.php文件”部分:http://codeigniter.com/user_guide/general/urls.html了解更多信息。
另外,您使用的route
会使您在转到www.site.com
时看到www.site.com/sites/content
。
使用网址www.site.com/sites/sitename/content/
,sites
是您的控制器,sitename
方法或功能,content
将被视为sitename
功能的参数 - 这不会像你想要的那样工作,但我不能确定没有看到你的控制器。
也许编辑你的问题并添加你的控制器,我们可以提供更多帮助。
更新:
1:$config['base_url']
与路由无关或使用哪个控制器,因此这使您的问题更难理解。
2:目前尚不清楚你想要完成什么(抱歉)。
当我去
时的想法www.site.com/sites/sitename /
默认控制器未加载。
可以告诉CodeIgniter加载一个 当URI不是时,默认控制器 现在,就像只有这样的情况 您的站点根URL是请求的。至 指定一个默认控制器,打开 你的application / config / routes.php 文件并设置此变量:
因此,这意味着当没有URI存在时,default_controller
仅使用 。换句话说:默认控制器仅在URL为www.site.com时适用,并且在任何其他情况下都不会使用(除非您在控制器文件夹中使用子文件夹 - 请参阅下文)。
如果您尝试将其设置为每个站点都有自己的控制器,则可以在控制器文件夹中使用子文件夹。
在routes.php中:
$route['sites/(:any)'] = "$1";
$route['default_controller'] = "content";
然后你的文件夹结构:
所以你有你的控制器文件夹。在其中,为每个站点创建一个文件夹。在每个控制器中创建默认控制器(在上图中命名为content.php)。
通过此设置,www.site.com/sites/site1
将从content
调用默认控制器(application/controllers/site1/content.php
),并显示该控制器的index
功能。
如果您想要调用site1控制器的其他功能,则URL将如下所示:
www.site.com/sites/site1/content/otherFunction
。
希望这有帮助。
答案 1 :(得分:1)
你似乎正在做的是寻找一个你正在经历的'sitename'的控制器。因此,如果您导航到site.com/sites/my-site/
,您的路由会告诉它寻找名为my-site的控制器并运行索引方法。
路由的值应该是实际控制器/方法对的路径。
$route['sites/([^/]+)/(.*)'] = '$2';
应该是
$route['sites/([^/]+)/(.*)'] = 'sites/index/$1/$2';
这假设它是索引方法,它接受网站名称作为网站控制器中的第一个参数。
答案 2 :(得分:0)
$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';
}
这是解决方案。谢谢所有回答的人。谢谢stormdrain。你指出了你的路由示例中的写入方向。感谢