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/admincomo na pastaweb(com os diretórioscss,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.
This work is licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License license.