+48 695 115 215 biuro@webkom.pl

Home.pl umożliwia podpięcie domeny pod konkretny wybrany przez nas katalog. Ma to swoje zalety, ale też i wady. Do zalet niewątpliwie należy zaliczyć fakt, że tak przygotowana domena z miejscem na serwerze zwiększa bezpieczeństwo i ułatwia zarządzanie serwisem, a całość działa jak osobny wirtualny serwer. Wadą takiego rozwiązania jest to, że powyżej katalogu do którego przypisana jest domena, nic nie jest dostępne. Powoduje to pewne problemy przy instalacji projektu stworzonego przy pomocą symfony, gdzie katalogiem startowym domyślnie jest katalog „/web”. Można oczywiście przebudować strukturę i całość zawartości z katalogu „/web” przenieść do katalogu głównego, psuje to jednak model zaproponowany przez twórców symfony. Istnieje także alternatywne rozwiązanie, które nie wymaga dużo pracy i pozwala pozostawić układ katalogów bez zmian. Rozwiązanie* to przedstawiam poniżej:

1. Plik .htaccess

W głównym katalogu tworzymy plik .htaccess o następującej treści:

Options +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteRule ^(.*)$ /web/$1

Reguła ta odpowiada za przekierowanie do katalogu „/web” każdego requesta wysłanego do głównego katalogu. To już w zasadzie powinno wystarczyć do odpalenia projektu (o ile w pliku config/config.php zostały ustawione prawidłowe ścieżki dostępu do bibliotek symfony). Pozostaje do rozwiązania jeszcze jeden problem ponieważ do każdego linku wygenerowanego przez symfony będziemy mieć dodawane „/web” którego nie chcemy.

2. Plik sfWebRequest.class.php

Z biblioteki symfony odszukujemy plik lib/request/sfWebRequest.class.php. W metodzie getPathInfoArray(), po wyjściu z instrukcji switch dodajemy następujący kawałek:

if (isset($this->pathInfoArray['SCRIPT_NAME']) &&
    preg_match('#^/web/#', $this->pathInfoArray['SCRIPT_NAME']))
{
  $this->pathInfoArray['SCRIPT_NAME'] =
  preg_replace('#^/web/#', '/', $this->pathInfoArray['SCRIPT_NAME']);
}

Kod ten sprawdza czy na początku ścieżki do pliku znajduje się kawałek „/web” i jeśli występuje to usuwa go.

3. Katalog tmp

W katalogu głównym tworzymy katalog tmp i nadajemy mu odpowiednie uprawnienia do zapisu i odczytu. W tym katalogu domyślnie będą zapisywane sesji użytkowników. Po tym zabiegu oraz po wyczyszczeniu cache wszystko już powinno działać prawidłowo.

4. Bonus

Lubię mieć porządek na serwerze, a że wersja _dev projektu krzyczy, że magic quotes na serwerze home.pl są domyślnie włączone to trzeba to naprawić. Można to zrobić oczywiście ze skryptu, poprzez ini_set(), ja jednak wole inne rozwiązanie. W tym celu w głównym katalogu tworzymy plik php.ini o następującej treści, która likwiduje nam problem:

magic_quotes_gpc = Off

* Opis dla symfony w wesji 1.0.x. Dla nowszych wersji jeszcze nie sprawdzałem, ale podejrzewam, że będzie podobnie.

[Update:] Przedstawiony przeze mnie sposób działa dla symfony w wersjach od 1.0 do 1.4 (sprawdzone).