2012-05-18 21 views
6

Mam trudności ze skonfigurowaniem moich .htaccess i urlManager w projekcie Yii, aby mieć frontend w http://www.example.com i backend w http://www.example.com/backend z następującą strukturą folderów. Każda pomoc jest mile widziana. Dzięki.Yii: .htaccess i urlManager dla oddzielnego backendu i interfejsu użytkownika

/assets 
/backend 
    /controllers 
    /config 
     main.php 
    /models 
    /views 
/common 
    /models 
/protected 
    /controllers 
    /config 
     main.php 
    /models 
    /views 
.htaccess 
backend.php 
index.php 

Rozwiązanie: po wielkim pomocą @ bool.dev wszystko to działa, więc dodaję tutaj każdą potrzebną ostateczną pliku. W frontend używam formatu ścieżki adresu URL i ukrycie index.php

/backend/config/main.php

$backend=dirname(dirname(__FILE__)); 
Yii::setPathOfAlias('backend', $backend); 
return array(
'basePath' => $backend, 

'controllerPath' => $backend.'/controllers', 
'viewPath' => $backend.'/views', 
'runtimePath' => $backend.'/runtime', 

...); 

/protected/config/main.php

'urlManager'=>array(
    'urlFormat'=>'path', 
    'showScriptName'=>false, 
    'rules'=>array(
      '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
    ), 
), 

.htaccess

Options +FollowSymLinks 
IndexIgnore */* 
<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteBase /yii/example/ 
RewriteRule backend backend\.php [T=application/x-httpd-php] 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php 
RewriteRule . index.php 
</IfModule> 

backend.php

$yii=dirname(__FILE__).'/../../yii/framework/yii.php'; 
$config=dirname(__FILE__).'/backend/config/main.php'; 
require_once($yii); 
Yii::setPathOfAlias('common', dirname(__FILE__).DIRECTORY_SEPARATOR.'common'); 
Yii::createWebApplication($config)->run(); 

index.php

$yii=dirname(__FILE__).'/../../yii/framework/yii.php'; 
$config=dirname(__FILE__).'/protected/config/main.php'; 
require_once($yii); 
Yii::setPathOfAlias('common', dirname(__FILE__).DIRECTORY_SEPARATOR.'common'); 
Yii::createWebApplication($config)->run(); 
+0

czy możesz mi powiedzieć, dlaczego nie zrobiłeś backendu modułu? –

+0

Chciałem śledzić strukturę katalogów witryny projektu Yii http://www.yiiframework.com/wiki/155/the-directory-structure-of-the-yii-project-site/ opisanej przez Qiang. – Puigcerber

+0

Nie powinieneś mieć oddzielnej htaccess dla backendu, wewnątrz folderu backendu ?, powiedz, czy chcesz uzyskać zewnętrzną htaccess dla example.com i utworzyć inny htaccess wewnątrz backendu, na przykład.com/backend –

Odpowiedz

6

Według this wiki article by Qiang, można dokonać następujących zmian i to powinno działać:

// backend.php: 
require('path/to/yii.php'); 
Yii::createWebApplication('backend/config/main.php')->run(); 

Następnie w konfiguracji Twojego backend (tj backend/config/main .php):

$backend=dirname(dirname(__FILE__)); 
$frontend=dirname($backend); 
Yii::setPathOfAlias('backend', $backend); 

return array(
    'basePath' => $backend, 

    'controllerPath' => $backend.'/controllers', 
    'viewPath' => $backend.'/views', 
    'runtimePath' => $backend.'/runtime', 

    'import' => array(
     'backend.models.*', 
    ), 
    // ... other configurations ... 
); 

Ale aby to działało, potrzebujemy głównego .htaccess, aby przekierować example.com/backend do backend.php, którego jeszcze nie znałem.

Edit:
Tylko zorientowali się:

RewriteEngine On 
RewriteBase /projectroot/ 
RewriteRule backend backend\.php [T=application/x-httpd-php] 

RewriteBase było ważne dla mnie, jako backend.php nie został znaleziony, kiedy nie dał prawidłową projectroot, w zasadzie powinien to być katalog, w którym znajduje się skrypt wejściowy backend.php.

+0

daj mi znać, jak to działa dla ciebie –

+0

Nic tak daleko, ten przewodnik był pierwszym, który próbowałem podążyć, ale nie ma sposobu, aby go uruchomić ... – Puigcerber

+0

faktycznie próbowałem z twoją strukturą katalogów, i zadziałało, więc możesz mi powiedzieć dokładnie o błędach? lub problemy, które otrzymujesz? –