Контроллер по умолчанию не загружается после изменения маршрута - PullRequest
3 голосов
/ 27 июля 2010

У меня установлена ​​многопользовательская установка codeigniter, где у меня есть такой код, что я могу обслуживать сайты с такими ссылками

site.com / сайты / имя_сайт / контроллер / функция / вары site.com/controller/function/vars/

subdom.site.com / контроллер / функция / вары

проблема в том, что с маршрутизацией

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

Я работаю по ссылкам типа

site.com / сайты / имя_сайт / контроллер / функция / вары site.com/controller/function/vars

По идее, когда я иду на

www.site.com / sites / sitename /

контроллер по умолчанию не загружается.

Я сделал config.php таким образом, что касается структуры ссылок, когда я захожу на ссылку

* * Site.com тысяча двадцать-один / сайты / имя_сайт / контроллер / функция / вары * * тысяча двадцать-дв

затем

$config['base_url']="http://site.com/sites/sitename";

если я пойду к

* 1 028 * site.com / контроллер / функция / вары

тогда

$ конфиг [ '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;

Ответы [ 3 ]

1 голос
/ 28 июля 2010

То, что вы, похоже, делаете, - это поиск контроллера с «sitename», через который вы проходите. Поэтому, если вы перейдете к site.com/sites/my-site/, ваш маршрут скажет ему найти контроллер my-site и запустить метод index.

Значением маршрута должен быть путь к фактической паре контроллер / метод.

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

должно быть

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

Предполагается, что именно метод индекса принимает имя сайта в качестве первого параметра в контроллере вашего сайта.

1 голос
/ 28 июля 2010

Не совсем понятно, о чем вы спрашиваете, но вот выстрел:

Вам необходимо создать файл .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 - это не будет работать так, как кажется как ты хочешь, но я не могу быть уверен, не увидев твой контроллер.

Возможно, отредактируйте свой вопрос и добавьте свой контроллер (и), и мы можем оказать вам дополнительную помощь.


UPDATE:

1: $config['base_url'] не имеет ничего общего с маршрутизацией или тем, какой контроллер используется, поэтому это затрудняет понимание вашего вопроса.

2: Непонятно, чего вы пытаетесь достичь (извините).

По идее, когда я иду на

www.site.com / сайты / имя_сайта /

контроллер по умолчанию не загружается.

Согласно руководству пользователя CI :

CodeIgniter может сказать, чтобы загрузить контроллер по умолчанию, когда URI не настоящее время, как будет в случае, когда только запрашивается корневой URL вашего сайта. к указать контроллер по умолчанию, открыть ваше приложение / config / rout.php файл и установите эту переменную:

Итак, это означает, что default_controller используется только , когда отсутствует URI. Другими словами: контроллер по умолчанию применяется только тогда, когда URL-адрес www.site.com, и ни в каком другом случае он не будет использоваться (если вы не используете подпапки в папке контроллеров - см. Ниже).

Если вы пытаетесь сделать так, чтобы каждый из ваших сайтов имел свой собственный контроллер, вы можете использовать подпапки в папке вашего контроллера.

В маршрутах .php:

$route['sites/(:any)'] = "$1";
$route['default_controller'] = "content";

Тогда структура вашей папки:

image

Итак, у вас есть папка контроллера. В нем создайте папку для каждого сайта. В каждом из этих контроллеров создайте свой контроллер по умолчанию (с именем content.php на изображении выше).

При этой настройке www.site.com/sites/site1 вызовет контроллер по умолчанию (content) из application/controllers/site1/content.php и покажет функцию index этого контроллера.

Если затем вы хотите вызвать другие функции контроллера site1, URL будет выглядеть следующим образом: www.site.com/sites/site1/content/otherFunction.

Надеюсь, это поможет.

0 голосов
/ 30 июля 2010
$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';
                        }

это было решение. Спасибо всем, кто ответил. спасибо буря вы указали мне направление записи в вашем примере маршрутизации. Спасибо

...