Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] .htaccess Apache 1.3 z FCGI
Forum PHP.pl > Forum > PHP > Frameworki
r4nd4ll
Witam,
Mam problem z uruchomieniem Zend Framework na moim hostingu.
Otóż jak wiadomo, w ZF wszystkie żądania powinny być kierowany na bootstrapp'a. Tak też miałem. Lokalnie wszystko działało. Problemy zaczęły się, gdy chciałem wrzucić swój serwis na serwer..
Ostatnia moja konfiguracja .htaccess:
CODE
RewriteEngine On
RewriteBase /
RewriteRule .* index.php [L]

Kombinowałem jak tylko umiałem i w zależności od moich próbnych konfiguracji efekty były następujące:
albo Not-found
albo błąd 500 Internal Server Error
albo efekt był taki, że żądanie zostało przekierowane faktycznie na index.php, ale nie został odpalony żaden kontroler, ani akcja! Jedynie w pasku adresu pojawiało się odpowiedni adres, natomiast ładowana strona, to wciąż była strona główna.

Napisałem do administratorów serwera i otrzymałem odpowiedź, że na serwerze jest zainstalowany Apache 1.3 z PHP w trybie Fast CGI i to właśnie pod niego trzeba pisać swoje regułki .htaccess. Jednak już konkretniejszej odpowiedzi nie otrzymałem. Szukałem na ten temat, przeglądałem dokumentację Apache 1.3 jednak nie udało mi się znaleźć nic co by mi pomogło w tej sytuacji sad.gif
Mało tego, na drugiej subdomenie na tym samym serwerze, jest odpalony mod_rewrite (tylko, że dla aplikacji napisanej strukturalnie) i działa bez problemu! Bez konieczności pisania żadnych dziwnych reguł. Czyli to co mówią admini trochę wydaje mi się w tym momencie już kitem..
Pomyślałem, że może ktoś spotkał się tutaj z podobnym problemem i mógłby naprowadzić mnie na rozwiązanie tego, bo na adminów raczej chyba liczyć nie mogę.. Byłbym bardzo wdzięczny za jakąś podpowiedź, bo mi już ręce opadają z tym, siedzę kilka dni i nic nie potrafię już wymyśleć sad.gif
viking
Regułki się nie zmieniają. Masz je w dokumentacji ZF. Poza tym jeśli szczególnie nie skopałeś projektu (linki) to działa również przez /index.php/ - ZF niczego nie narzuca, przepisywanie to tylko bajer.
r4nd4ll
Tak też myślałem. Więc co może być przyczyną takiego stanu rzeczy jak wyżej opisałem?
viking
W twojej regule. Jak mówiłem masz to napisane w dokumentacji.
r4nd4ll
Jedna reguła z dokumentacji:
Cytat
RewriteEngine on
RewriteRule !.(js|ico|gif|jpg|png|css|html)$ index.php

Efekt:
Cytat
Additionally, a 500 Internal Server Error
error was encountered while trying to use an ErrorDocument to handle the request.


I druga reguła z dokumentacji:
Cytat
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Efekt? - taki jak napisałem wcześniej - tylko w adresie odpowiedni link, strona się przeładowuje, ale wciąż wyświetlana strona główna..
viking
A jak działa bez przepisywania (wskaż na adres/index.php)? Pokaż kod.
r4nd4ll
Z wyłączonym rewrite, ładuje się tylko plik index.php, każde inne żądanie oczywiście nie znajduje strony.
Ale który dokładnie fragment kodu masz na myśli?
viking
Dlaczego oczywiście? ZF akceptuje notację adres/index.php/modul/kontroler/akcja . Rewrite jest miłym dla oka dodatkiem. Kod. Nie wiem, zaczynając od index.php. O ile oczywiście działa bez rewrite.
r4nd4ll
  1. <?php
  2. error_reporting(E_ALL|E_STRICT);
  3. date_default_timezone_set('Europe/Warsaw');
  4. $homeDir = '/tu_sciezka_poczynajac_od_home/';
  5. set_include_path('.' . PATH_SEPARATOR . $homeDir . 'library' . PATH_SEPARATOR . get_include_path());
  6.  
  7. require_once 'Zend/Loader/Autoloader.php';
  8. Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
  9.  
  10. Zend_Session::start();
  11.  
  12. $config = new Zend_Config_Ini($homeDir . 'application/config.ini','general');
  13. set_include_path('.' . PATH_SEPARATOR . $config->path->models . PATH_SEPARATOR . get_include_path());
  14.  
  15. Zend_Registry::set('config', $config);
  16. Zend_Registry::set('dbconfig', new Zend_Config_Ini($homeDir . 'application/config.ini','dbtables'));
  17. Zend_Registry::set('db', Db::initDb($config));
  18. Zend_Registry::set('auth', Zend_Auth::getInstance());    
  19.  
  20. $frontController = Zend_Controller_Front::getInstance();
  21. $frontController->throwExceptions(true);
  22. $frontController->setBaseUrl('http://adres_www/');
  23. $frontController->setControllerDirectory($homeDir . 'application/controllers');
  24.  
  25. $frontController->dispatch();
  26. ?>
viking
Spróbuj bez setBaseUrl (jest automatycznie wykrywany), $homeDir możesz odnaleźć przez realpath(dirname(__FILE__)). Gdy do jakiej akcji się odwołujesz pojawia się błąd? Jest poprawnie zapisana? I nie odpowiedziałeś czy działa ci bez rewrite.
r4nd4ll
Po stokroć dzięki Ci kolego! smile.gif
Wyrzucenie setBaseUrl załatwiło sprawę i wszystko działa jak należy smile.gif
A ja bym się głowił dalej z regułami, .htaccessem itp winksmiley.jpg
Jeszcze raz wielkie dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.