Caution: You are browsing the legacy symfony 1.x part of this website.

Como configurar um servidor web (web server)

1.2
Symfony version
1.1
Language

Visão Geral

Existem várias maneiras de configurar um web server para ativar o acesso à aplicações symfony. Este capítulo demonstrará as diferentes configurações possíveis e alguns truques para otimizar o acesso.

Introdução

Nos exemplos acima descrito, o projeto myproject contém a aplicação myapp. O controlador desta aplicação se chama index.php e está em /home/steve/myproject/web/. O diretório de dados do symfony é o $data_dir.

Virtual Host

O Virtual Hosting permite você configurar seu web server para que sua aplicação symfony apareça na raiz de um domínio (ou um sub-domínio):

http://myapp.example.com/

Vamos supor que esteja rodando o Apache em seu servidor. Para configurar o Virtual Host para a aplicação myapp, adicione as linhas a seguir no arquivo httpd.conf:

<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>

A declaração Alias é necessária para as imagens da barra do debug serem exibidas. O $data_dir tem de ser substituído pelo seu diretório PEAR. Por exemplo, para *nix, você deve escrever:

Alias /sf /usr/local/lib/php/data/symfony/web/sf

Você pode encontrar mais sobre diretórios PEAR em installation chapter.

Reinicie o Apache e é isso aí: a webapp pode ser chamada e vista através da URL:

http://myapp.example.com/

ou, no modo debug:

http://myapp.example.com/myapp_dev.php/

Reescrevendo URL (URL rewriting)

Por padrão, o web server é configurado para evitar que apareça o index.php na URL. Isso significa que em vez de exibir:

http://myapp.example.com/index.php/

seu servidor exibirá e reconhecerá:

http://myapp.example.com/

Isto usa o módulo mod_rewrite do Apache, e requer as seguintes linhas em seu myproject/web/.htaccess (que é o caso por padrão):

# 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]

Existem outras coisas além dessas que você pode querer adicionar as suas URLs: um .html no final por exemplo. Normalmente, quando se chama a action index do módulo main, com a configuração padrão de routing, será exibida a URL:

http://myapp.example.com/main/index

Por padrão, o settings.yml da aplicação, contém comentado o parâmetro suffix:

all:
#  .settings:
#    suffix:        .

Para você fazer a action index do módulo main aparecer assim:

http://myapp.example.com/main/index.html

Basta você descomentar e setar o parâmetro suffix para .html:

all:
  .settings:
    suffix:        .html

Alias

Se você já tem um website no nome do domínio, e se quiser que sua aplicação symfony possa ser acessada dentro desse domínio, então a solução do virtual host não irá funcionar. Vamos supor que você quer acessar sua aplicação symfony com:

http://www.example.com/myapp/

Para fazer isso, abra o httpd.conf e adicione as linhas:

Alias /myapp/ /home/steve/myproject/web/
<Directory "/home/steve/myproject/web">
   AllowOverride All
   Allow from All
</Directory>

Você também precisa editar o arquivo .htacces localizado em myproject/web/ e mudar o último rewrite de

RewriteRule ^(.*)$ index.php [QSA,L]

para

RewriteRule ^(.*)$ /myapp/index.php [QSA,L]

Reinicie o Apache, e ente acessar sua aplicação:

http://www.example.com/myapp/

Múltiplas aplicações dentro de um projeto

Durante a concepção de projetos, um dia ou outro, você terá o problema de acesso a múltiplas aplicações. Por exemplo, no nosso projeto myproject, você pode ter uma aplicação pública myapp e a admin para gerenciar o conteúdo. Como autorizar o acesso para múltiplas aplicações dentro de um projeto?

Virtual hosts

Você pode adicionar um novo virtual host no httpd.conf do Apache. Isso é fácil de entender:

<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>

Aliases

Alternativamente, você pode adicionar um novo alias. Isso permitirá que você tenha conteúdos da web separados (.css, .js, imagens etc...) para cada aplicação. Isto evita também a modificação direta no arquivo httpd.conf.

Primeiro, crie um novo diretório na pasta web:

$ mkdir /home/steve/myproject/web/admin

Então, mova o front controller da aplicação admin para o novo diretório e copie o .htaccess para ter uma nova aplicação:

$ cd /home/steve/myproject/web
$ mv admin.php admin/index.php
$ mv admin_dev.php admin/
$ cp .htaccess admin/

Então, execute os dois últimos passos descritos acima para configurar o alias. Edite o .htaccess localizado em myproject/web/admin/ e mude

RewriteRule ^(.*)$ index.php [QSA,L]

para

RewriteRule ^(.*)$ /admin/index.php [QSA,L]

Edite ambos front controllers (myproject/web/admin/index.php e myproject/web/admin/admin_dev.php) e mude:

define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/..'));

para:

define('SF_ROOT_DIR', realpath(dirname(__FILE__).'/../..'));

Isso é suficiente para acessar a aplicação admin por:

http://whateveryourmainurlis/admin/

Nota: Você vai precisar recriar a mesma estrutura de arquivos de seu diretório web/admin como na pasta web (com os diretórios css,js,images,uplads)

IIS

Symfony é compatível com o IIS. Para aprender mais sobre a instalação e configuração de um projeto symfony no ambiente IIS, leia o tutorial.