Mateusz matipl Kamiński: blog o programowaniu, IT, finansach i własnym życiu

Zend Framework na hostingu współdzielonym

Większość ofert hostingowych w Polsce od zawsze udostępnia nam jeden katalog, ew. możliwość wskazania dla danej domeny katalogu gdzie przechowujemy nasz projekt.
Dzięki temu wystarczy do niego wgrać aplikację i wszystko działa.
Kiedyś nie stanowiło to problemu, gdy cała aplikacja była w jednym worku, a za pomocą odpowiednich sztuczek nie pozwalało się na bezpośredni dostęp do plików źródłowych PHP lub konfiguracyjnych.

Obecnie, np. z punktu widzenia osoby tworzącej z wykorzystaniem Zend Framework stanowi to problem, ponieważ domyślny układ projektu wygląda tak:

   application/
      controllers/
      views/
         scripts/
   library/
   public/
   tests/

Ze względów m.in. bezpieczeństwa w ZF jest wydzielony jeden katalog publiczny (public), który jest domyślnym katalogiem dostępnym z Sieci. Gdy taką aplikację umieścimy np. na hostingu w home.pl aplikacja nam się nie uruchomi, a każda osoba z Internetu będzie miała dostęp do wszystkich plików (pliki PHP nie stanowią problemu, ale już pliki INI, SQL tak). Wiele osób przegrywa plik index.php do katalogu nadrzędnego odpowiednio go modyfikując – to błąd. Owszem, aplikacja zadziała, ale nie poprawi to względów bezpieczeństwa.

Problem można bardzo łatwo rozwiązać jeśli nasz usługodawca daje możliwość umieszczania plików .htaccess:

RewriteEngine On

RewriteRule ^\.htaccess$ - [F]

RewriteCond %{REQUEST_URI} =""
RewriteRule ^.*$ /public/index.php [NC,L]

RewriteCond %{REQUEST_URI} !^/public/.*$
RewriteRule ^(.*)$ /public/$1

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.*$ - [NC,L]

RewriteRule ^public/.*$ /public/index.php [NC,L]

Wystarczy go umieścić w katalogu głównym, a on załatwi już odpowiednie przekierowania poszczególnych wywołań.
Oczywiście jeśli mamy możliwość konfiguracji vhost-ów lub ustawienia katalogu aplikacji w inny sposób powinniśmy z niego skorzystać, zamiast cudować z htaccess.

Podobne wpisy:

CZYTAJ PRZEZ RSS

  • Myślę że lepiej po prostu poszukać hostingu w którym mamy więcej niż tylko jeden katalog publiczny. Niestety jest tak że zdecydowana większość wybiera nazwa.pl lub home.pl

  • Świeża aplikacja stworzona Zend Tool’em,
    wklejam powyższe reguły do Test/.htaccess .

    Pozostała struktura katalogów:

    Test/application
    Test/public

    itd. ,wszystko standardowo.. a w logu apache’a dostaję:

    [Sat Jun 12 14:34:40 2010] [error] [client 127.0.0.1] File does not exist: C:/Users/Domowy/Desktop/Serwer/public
    [Sat Jun 12 14:34:40 2010] [error] [client 127.0.0.1] File does not exist: C:/Users/Domowy/Desktop/Serwer/favicon.ico

    Proszę o pomoc…:)

  • A i dostaję w przeglądarce błąd:

    „Nie można wyświetlić strony” … :/
    / „Oj! Ten link wygląda na uszkodzony.” (Chrome)

    czyli 404 ;P

  • @Help me!: Wygląda, że jakiś problem z konfiguracją Apache..Jak skonfigurowałeś/aś vhost-a ? Zapraszam ew. na bezpośredni kontakt

  • No i .htaccess zabiera więcej CPU, niż skorzystanie z vhost.

  • @BlueMan: oczywiście, że najlepiej zrobić rewrite w ramach konfiguracji vhosta, i później dać ciut odsapnąć. Zresztą niektóre serwery WWW tylko w ten sposób pozwalają skorzystać z rewrite…
    Ale niestety nie zawsze mamy taką możliwość.

  • Witaj,
    wkleiłem sobie na home.pl twój config… problem jest taki ze w plikach z widokami nie chce odwolywac sie przez katalog public, tylko bezposrednio przez „/styles/style.css”. Oczywiscie katalog styles znajduje sie w katalogu public. Niestety strona nie laduje mi w ogole obrazkow… Oczywiscie pewnie dzieje sie tak dlatego ze ten plik po prostu nie istnieje – nalezaloby dokleic do %{REQUEST_FILENAME} w jakis sposob katalog public… ale jak? i jak to przekierowac? POMOCY :)

  • @carlos: Problem o którym mówisz powinno załatwić (jak w przykładzie):
    RewriteCond %{REQUEST_URI} !^/public/.*$
    RewriteRule ^(.*)$ /public/$1

    Czyli wszystko co nie zaczyna się od /public to dodaj do URL public

Możesz śledzić odpowiedzi za pomocą kanału RSS 2.0