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/";

2 番目のケースでは、デフォルトのコントローラーが完全にロードされます。サブサイトの場合 not/

私はちょうど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

no 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ユーザーガイドによると:

CodeIgniterは、サイトのルートURLのみが要求された場合のように、URIが存在しない場合にデフォルトのコントローラーをロードするように指示できます。デフォルトのコントローラーを指定するには、application / config / routers.phpファイルを開き、次の変数を設定します。

つまり、これは、URIが存在しない場合にのみdefault_controllerが使用されることを意味します。つまり、デフォルトのコントローラーはURLがwww.site.comの場合にのみ適用され、それ以外の場合は使用されません(controllersフォルダーでサブフォルダーを使用している場合を除く-以下を参照)。

各サイトが独自のコントローラーを持つように作成しようとしている場合は、コントローラーフォルダー内のサブフォルダーを使用できます。

ルート.php:

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

次に、フォルダ構造:

これで、コントローラーフォルダーができました。その中に、サイトごとにフォルダを作成します。これらの各コントローラーで、デフォルトのコントローラー(上の画像ではcontent.phpという名前)を作成します。

この設定では、からデフォルトのコントローラー()www.site.com/sites/site1を呼び出し、そのコントローラーの機能を表示します。contentapplication/controllers/site1/content.phpindex

次に、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';

これは、サイト コントローラーの最初のパラメーターとしてサイト名を受け入れる index メソッドであると想定しています。

于 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 に答える