2015-07-22 11 views
8

Ho distribuito yii2 in una sottodirectory. Sto incontrando problemi sul reindirizzamento. Sul mio localhost, ho lavorato al mio progetto non in una sottodirectory, quindi non ho alcun problema. Ma quando lo ho distribuito sul nostro server live e ho inserito il progetto in una sottodirectory, ho dei problemi.Distribuzione di yii2 in una sottodirectory

Il mio problema è che quando visito la home page del mio sito mi viene reindirizzato alla radice del sito.

Ecco un esempio: Sito principale: http://example.com/

Yii2 sito: http://example.com/myproject/

Quando provo ad andare a http://example.com/myproject/, sto dovrebbe essere reindirizzati a http://example.com/myproject/login, invece sto reindirizzato a http://example.com/login.

ho già cambiato il mio .htaccess in questo

RewriteEngine on 

# 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 ^(.*) system/index.php/$1 [QSA,L] 

ma penso che questo è sbagliato però ...

Ho anche questo uno sul mio web.php

$config = [ 
    'id' => 'basic', 
    'basePath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..', 
    'defaultRoute' => 'site/login', 
    //... other codes here... 

Come potete vedere, ho un defaultRoute da site/login ma sembra che continui a reindirizzarlo sullo /login, che non è in un link di sottocartella.

Qualsiasi aiuto come impostare yii2 in una sottodirectory

Il vostro aiuto sarà molto apprezzato. Grazie!

risposta

6

UrlManager non sa che l'app non si trova nella directory principale del server web. Prova a impostare il vostro $config['components']['urlManager']['baseUrl'] al percorso del progetto:

// in web.php 
$config = [ 
    'id' => 'basic', 
    //... other codes here... 
    'components' => [ 
     'urlManager' => [ 
      'class' => 'yii\web\UrlManager',   
      'baseUrl' => 'myproject', 
     ] 
    ] 
] 

proposito, si potrebbe accorciare la definizione basePath a

'basePath' => dirname(__DIR__), 

che dovrebbe restituire la stessa directory con (più pulito e IMHO) codice meno.

4

tenta di utilizzare il RewriteBase param del file .htaccess impostando il percorso della cartella del progetto:

RewriteEngine on 

RewriteBase /myproject 

# If a directory or a file exists, use the request directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# Otherwise forward the request to index.php 
# RewriteRule . index.php 
RewriteRule ^(.*) system/index.php/$1 [QSA,L] 
+1

"RewriteBase" non dovrebbe essere solo "/ myproject"? Buon punto però! – tarleb

+0

Sì hai ragione, non ho notato la cartella ** system ** inclusa in ** RewriteRule **, grazie @tarleb –

2

Ho avuto lo stesso problema, modificando lo strano effetto .htaccess ha,
urlManager. baseUrl config fixes url creations and roots,
assetManager.baseUrl config corregge il percorso di script/stili

'components' => [ 
    'urlManager' => [ 
     'baseUrl' => '/myproject/', 
    ... 
    ], 
    'assetManager' => [ 
     'baseUrl' => '@web/myproject/assets', 
    ], 
... 
]