2012-05-18 14 views
6

Ich habe eine harte Zeit, meine .htaccess und den URLManager in einem Yii-Projekt zu konfigurieren, um das Frontend in http://www.example.com und das Backend in http://www.example.com/backend mit der folgenden Ordnerstruktur zu haben. Jede Hilfe ist willkommen. Vielen Dank.Yii: .htaccess und urlManager für separates Backend und Frontend

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

Lösung: nach der großen Hilfe von @ bool.dev allem es funktioniert, so dass das Hinzufügen ich hier jede benötigte endgültige Datei. Im Frontend verwende ich Pfad Format für die URL und Ausblenden der 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

Können Sie mir sagen, warum haben Sie nicht Backend ein Modul gemacht? –

+0

Ich wollte der Verzeichnisstruktur der Yii-Projektseite http://www.yiiframework.com/wiki/155/die-directory-structure-of-the-yii-project-site/ folgen, die von Qiang beschrieben wurde. – Puigcerber

+0

sollten Sie keine separate htaccess für Back-End, im Back-End-Ordner ?, sagen Sie die äußere htaccess für example.com, und erstellen Sie eine andere htaccess innerhalb Backend, zum Beispiel.com Backend –

Antwort

6

Nach this wiki article by Qiang Sie folgende Änderungen vornehmen könnten und es sollte funktionieren:

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

Dann in Ihrem Backend-Config (dh 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 ... 
); 

Aber damit das funktioniert, brauchen wir den Haupt-.htaccess, um example.com/backend zu backend.php zu routen, was ich noch nicht herausgefunden habe.

Edit:
gerade herausgefunden:

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

Die RewriteBase war wichtig für mich, als backend.php nicht gefunden wurde, wenn ich nicht den richtigen projectroot, gegeben hatte, im Grunde Es sollte das Verzeichnis sein, in dem Sie das Eintragsskript backend.php haben.

+0

lassen Sie mich wissen, wie dies für Sie funktioniert –

+0

Nichts so weit, das Handbuch war das erste, das ich versuchte zu folgen, aber es gibt keine Möglichkeit, es zur Arbeit zu bekommen ... – Puigcerber

+0

tatsächlich habe ich mit Ihrer Verzeichnisstruktur versucht, und es hat funktioniert, Kannst du mir die genauen Fehler sagen? oder Probleme, die Sie bekommen? –

Verwandte Themen