2010-07-27 88 views
3

後控制器不加載我有個笨multistie安裝在那裏我有這樣的代碼,我可以成爲這樣的鏈接默認改道

site.com/sites/sitename/controller/function/vars site.com/網站控制器/功能/瓦爾/

subdom.site.com/controller/function/vars

的challange是,均可進行路由

$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

the n

$ 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 /域/ 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
$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。您在路由示例中指出了寫入方向。謝謝

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功能 - 這會不會像它看起來像你想工作,但我不能確保沒有看到你的控制器。

也許編輯你的問題並添加你的控制器,我們可以得到更多的幫助。


UPDATE:

1:$config['base_url']無關具有路由或控制器正在被使用,所以這是使你的問題很難理解。

2:目前尚不清楚你想要完成什麼(抱歉)。

通過想法,當我去

www.site.com/sites/sitename/

默認的控制器沒有加載。

按照CI user guide

笨可以告訴加載 默認控制器當URI不 現在,當請求僅 站點根URL,這將是這種情況。要 指定一個默認的控制器,打開 您的application/config/routes.php文件 文件,並設置這個變量:

那麼,這是什麼意思是,default_controller用於時,有沒有存在的URI 。換句話說:默認控制器僅適用於URL爲www的情況。site.com,並且在任何情況下都不會使用它(除非您在控制器文件夾中使用子文件夾 - 請參閱下文)。

如果您想讓每個站點都有自己的控制器,則可以在控制器文件夾中使用子文件夾。

在routes.php文件:

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

那麼你的文件夾結構:

所以,你有你的控制器文件夾。在它中,爲每個網站創建一個文件夾。在每個控制器中創建您的默認控制器(在上圖中名爲content.php)。

通過此設置,www.site.com/sites/site1將從application/controllers/site1/content.php調用默認控制器(content)並顯示該控制器的index功能。

如果您想要調用site1控制器的其他功能,則URL將如下所示: www.site.com/sites/site1/content/otherFunction

希望這會有所幫助。

+0

stromdrain謝謝你的回答,但我知道如何刪除index.php並建立很好的鏈接。我編輯了這個問題。現在更清楚了嗎? – 2010-07-28 05:48:21

+0

@ DR.GEWA:請參閱上面我的答案的「更新」部分。 – stormdrain 2010-07-28 17:04:51

+0

您建議的路由也不起作用.... 404 ... – 2010-07-29 06:15:13

1

你似乎在做的是尋找一個控制器與你正在通過的'sitename'。因此,如果您導航到site.com/sites/my-site/,則您的路線會告訴它尋找名爲my-site的控制器並運行索引方法。

路由的值應該是實際控制器/方法對的路徑。

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

應該

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

這是假設它是接受站點名稱,因爲它是在你的站點控制器的第一個參數的索引方法。

+0

此路由將不起作用,因爲我的應用程序文件夾中沒有任何sites.php控制器 – 2010-07-29 20:37:02