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