2015-07-22 22 views
8

Zainstalowałem yii2 na podkatalogu. Pojawiają się problemy z przekierowaniem. Na moim localhost, pracowałem mój projekt nie w podkatalogu, więc nie mam żadnych problemów. Ale kiedy umieściłem go na naszym serwerze na żywo i umieściłem projekt w podkatalogu, mam problemy.Wdrażanie yii2 w podkatalogu

Mój problem polega na tym, że kiedy odwiedzam stronę główną mojej witryny, przekierowuję mnie do katalogu głównego strony.

Oto przykład: Strona główna: http://example.com/

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

Kiedy staram się iść do http://example.com/myproject/, ja spodziewałem się być przekierowany na http://example.com/myproject/login, zamiast ja przekierowany do http://example.com/login.

ja już zmieniłem .htaccess w tym jednym

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] 

Ale myślę, że ten jeden jest źle chociaż ...

mam również ten na moim web.php

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

Jak widać mam defaultRoute być site/login, ale wydaje się, że nadal przekierować na /login, który nie jest w podfolderze link.

Każda pomoc jak skonfigurować yii2 w podkatalogu

Twoja pomoc będzie bardzo mile widziane. Dzięki!

Odpowiedz

6

UrlManager nie wie, że aplikacja nie znajduje się w katalogu głównym serwera WWW. Spróbuj ustawić swój $config['components']['urlManager']['baseUrl'] do ścieżki Twojego projektu:

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

BTW, można skrócić swoją definicję basePath do

'basePath' => dirname(__DIR__), 

który powinien wrócić tego samego katalogu z mniejszym (i IMHO czystszego) kodu.

4

spróbuj użyć RewriteBase param swojego pliku .htaccess poprzez ustawienie ścieżki do katalogu projektu:

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

Czy "Przepisanie Bazy" nie powinno być po prostu '/ myproject'? Dobra uwaga! – tarleb

+0

Tak, masz rację, nie zauważyłeś folderu ** system ** zawartego w ** RewriteRule **, Thanks @tarleb –

2

miałem ten sam problem, modyfikując .htaccess ma dziwny efekt,
urlManager. baseUrl config naprawia url twory i korzenie,
assetManager.baseUrl config naprawia skrypt/style ścieżki

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