Áttekintés
Több módja is van a web szerver beállításának ha symfony alkalmazásokat szeretnénk futtatni. Ebben a fejezetben bemutatjuk a különböző konfigurációs lehetőségeket és néhány trükköt, optimalizációs lehetőséget.
Bevezető
Az alábbi példákban a myproject projekt egy myapp alkalmazást tartalmaz. Az alkalmazához tartozó front controller az index.php, ami a /home/steve/myproject/web/ könyvtárban foglal helyet. A symfony data könyvtárát a $data_dir jelöli.
Virtual host
A virtual hostolás lehetővé teszi a web szerver beállítását úgy, hogy a symfony alkalmazás a tartomány gyökerén (vagy egy altartományon keresztül) legyen elérhető.
http://myapp.example.com/
Tegyük fel, hogy Apache-ot futtatunk. A myapp alkalmazáshoz szükséges virtual host beállításhoz vegyük fel az alábbi sorokat a httpd.conf fileba:
<Directory "/$data_dir/symfony/web/sf"> AllowOverride All Allow from All </Directory> <VirtualHost *:80> ServerName myapp.example.com DocumentRoot "/home/steve/myproject/web" DirectoryIndex index.php Alias /sf /$data_dir/symfony/web/sf <Directory "/home/steve/myproject/web"> AllowOverride All Allow from All </Directory> </VirtualHost>
Az Alias parancs ahhoz szükséges, hogy a debug eszköztár helyesen jelenjen meg. A $data_dir jelöli a PEAR data könyvtárának helyét. Például, *nix rendszereken, a következőt kell megadni:
Alias /sf /usr/local/lib/php/data/symfony/web/sf
A PEAR könyvtárakról további információ a telepítés fejezetben található.
Az Apache újraindítása után az alkalmázás az alábbi URL-en érhető el:
http://myapp.example.com/
vagy debug módban:
http://myapp.example.com/myapp_dev.php/
URL rewriting
Alapesetben a web szerver úgy van konfigurálva, hogy az éles rendszerhez (production) tartozó front controller (index.php) ne jelenjen meg az URL-ben. Ez azt jelenti, hogy az alábbi forma helyett
http://myapp.example.com/index.php/
használható a következőt is:
http://myapp.example.com/
Ehhez az Apache a mod_rewrite modult használja, és a következő soroknak kell jelen lenni a myproject/web/.htaccess-ben (ami alapbeállítás):
# all files with .something are skipped
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_URI} !\.html$
RewriteRule .* - [L]
# the others are redirected to the front web controller
RewriteRule ^(.*)$ index.php [QSA,L]
    Még egy kicsit felturbózhatók az URL-ek: egy .html kiterjesztéssel. A main modul index action hívásakor, a routing rendszer alapbeállításaival, a következő URL jelenik meg:
http://myapp.example.com/main/index
Az alapértelmezett settings.yml tartalmaz egy kikommentezett suffix paramétert:
all: # .settings: # suffix: .
Ahhoz, hogy a fenti URL az alábbi formát vegye fel:
http://myapp.example.com/main/index.html
vegyük ki a kommentet az alábbi sorok elől:
all:
  .settings:
    suffix:        .html
    Alias
Ha már rendelkezünk domain névvel, és szeretnénk, ha a symfony alkalmazásunk ezen tartományon belül legyen elérhető, akkor a virtual host nem a megfelelő választás. Például tegyük fel, hogy az alkalmazást a következő címen akarjuk elérni:
http://www.example.com/myapp/
Hogy ezt megtehessük a httpd.conf-hoz hozzá kell adni a következő sorokat:
Alias /myapp/ /home/steve/myproject/web/ <Directory "/home/steve/myproject/web"> AllowOverride All Allow from All </Directory>
Emellett a myproject/web/ könyvtárban található .htaccess fileban is módosítani kell az utolsó rewrite szabályt erről:
RewriteRule ^(.*)$ index.php [QSA,L]
erre:
RewriteRule ^(.*)$ /myapp/index.php [QSA,L]
Az Apache újraindítása után az alkalmazásunk immár így is elérhető:
http://www.example.com/myapp/
Több alkalmazás egy projekten belül
Fejlesztés közben előbb-utóbb találkozunk a következő problémával: hogyan érhetünk el több alkalmazás is a projektünkön belül. Például a myproject projektünk rendelkezik egy myapp alkalmazással a nagyközönségnek és egy admin alkalmazással a tartalmak kezeléséhez (ezt back-office-nak is szokták nevezni). Hogyan engedélyezhetjük a hozzáférést a különböző alkalmazásokhoz?
Virtaul hostok
Felvehetünk új virtual hostokat a httpd.conf fileba. Ez könnyen érthető:
<Directory "/$data_dir/symfony/web/sf">
 AllowOverride All
 Allow from All
</Directory>
<VirtualHost *:80>
  ServerName myapp.example.com
  DocumentRoot "/home/steve/myproject/web"
  DirectoryIndex index.php
  Alias /sf /$data_dir/symfony/web/sf
  <Directory "/home/steve/myproject/web">
   AllowOverride All
   Allow from All
  </Directory>
</VirtualHost>
<VirtualHost *:80>
  ServerName admin.example.com
  DocumentRoot "/home/steve/myproject/web"
  DirectoryIndex admin.php
  Alias /sf /$data_dir/symfony/web/sf
  <Directory "/home/steve/myproject/web">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>
    Aliasok
Másik lehetőség új alias használata. Így különválaszhatók az egyes alkalmazásokhoz tartozó webes tartalmak (.css, .js, images, stb). Ezzel a módszerrel elkerülhetjük a httpd.conf szerkesztését.
Először hozzunk létre egy új könyvtárat a web alatt:
$ mkdir /home/steve/myproject/web/admin
Ezután tegyük át az admin alkalmazáshoz tartozó front controllereket az új könyvtárban, valamint másoljuk át a .htaccess filet is:
$ cd /home/steve/myproject/web $ mv admin.php admin/index.php $ mv admin_dev.php admin/ $ cp .htaccess admin/
Majd a fent ismertetett két utolsó lépéssel hozzunk létre egy aliast. Módosítsuk a myproject/web/admin/ könyvtárban található .htaccess-t:
RewriteRule ^(.*)$ index.php [QSA,L]
erre:
RewriteRule ^(.*)$ /admin/index.php [QSA,L]
Végül mindkét front controllert (myproject/web/admin/index.php and myproject/web/admin/admin_dev.php) módosítani kell:
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/..'));
erre:
define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/../..'));
Készen is vagyunk, az admin alkalmazás most már elérhető:
http://whateveryourmainurlis/admin/
Megjegyzés: a
web/adminkönyvtárban létre kell hozni awebalatti könyvtárstruktúrát (css,js,images,uploadskönyvtárakat), mivel mostmár minden root hivatkozás azadmin/könyvtárra mutat.
IIS
A symfony kompatibilis az IIS-sel. Minden további információ a telepítésről és konfigurálásról megtalálható a kapcsolódó leírásban.
This work is licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License license.