3

我有一个 codeigniter multistie 安装,我有这样的代码,我可以用这样的链接为网站提供服务

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

然后

$config['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/应用程序已加载

当用户转到 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;
4

3 回答 3

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

使用 url www.site.com/sites/sitename/content/sites是您的控制器、sitename方法或函数,并且content将被视为sitename函数的参数——这不会像您想要的那样工作,但如果没有看到您的控制器,我无法确定。

也许编辑您的问题并添加您的控制器,我们可以提供更多帮助。


更新:

1:$config['base_url']与路由或正在使用哪个控制器无关,因此这使您的问题更难理解。

2:不清楚你想要完成什么(对不起)。

我去的时候按主意

www.site.com/sites/sitename/

默认控制器未加载。

根据CI 用户指南

当 URI 不存在时,可以告诉 CodeIgniter 加载默认控制器,当只请求您的站点根 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

希望这可以帮助。

于 2010-07-28T01:38:24.223 回答
1

您似乎正在寻找一个带有您正在通过的“站点名称”的控制器。因此,如果你导航到site.com/sites/my-site/你的路由,它会告诉它寻找一个名为 my-site 的控制器并运行 index 方法。

路由的值应该是实际控制器/方法对的路径。

$route['sites/([^/]+)/(.*)'] = '$2';

应该

$route['sites/([^/]+)/(.*)'] = 'sites/index/$1/$2';

这是假设它是接受站点名称作为站点控制器中的第一个参数的索引方法。

于 2010-07-28T16:09:20.597 回答
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';
                        }

这是解决方案。感谢所有回答的人。谢谢暴风雨。您在路由示例中向我指出了写入方向。谢谢

于 2010-07-30T10:13:05.683 回答