CodeIgniter 4 htaccess i redirect
CI4 pojawił się już chwilę temu, o czym pisałem tutaj . Najbardziej upierdliwa jest początkowa konfiguracja, która zakłada że trzymamy wszystko poza public_html. Ma to sens, ale nie wszędzie jest to możliwe – a na pewno w moim środowisku developerskim wygodniej jest mi trzymać zadany projekt w jednym folderze.
Przedstawię tutaj szybką konfigurację i przykładowe .htaccess
, które pozwolą odpalać projekty po staremu. Jak dokładnie – a tak, że mamy dostęp do projektu przez folder np.: http://localhost/projekt a całość jest plików jest serwowowana np. z folderu ./root/projekt.
Zaczynamy od pobrania composera, a następnie odpalamy:
./composer.phar create-project codeigniter4/appstarter projekt
Oczywiście odpalamy to w folderze /root
dzięki temu nasz appstarter zainstaluje się w folderze /root/projekt
.
Potem zaczyna się zabawa. W folderze projekt tworzymy plik .htaccess
o takiej treści:
SetEnv CI_ENVIRONMENT development
RewriteEngine On
RewriteBase /projekt/
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
W tym folderze musimy też dodać plik .env
app.baseURL = 'http://localhost/projekt/'
app.indexPage = ''
app.uriProtocol = 'PATH_INFO'
I teraz jak klikniemy http://localhost/projekt/home/index
to otworzy nam się kontroler Home
i metoda Index
. Niestety domyślny kontroler, który powinien ładować się po wejściu na http://localhost/projekt/
wywala na błąd:
Controller or its method is not found: \App\Controllers\Projekt::index
Można temu zaradzić na dwa sposoby. Pierwszy to utworzenie “brakującego” kontrolera, albo zmiana Home.php na Projekt.php – drugi jest łatwiejszy. Do pliku app/Config/Routes.php
dopisujemy nową regułę:
$routes->get('/projekt/', 'Home::index');
Dlaczego domyślny routing nie działa – nie wiem. Dla projektu umieszczonego w głównym folderze, lub kierowania dokument root na /public – problem nie występuje.