Removendo a pasta public da sua aplicação Zend Framework

A primeira coisa que questionei quando iniciei os estudos do Zend Framework foi como colocar a sua aplicação dentro de uma pasta em um site já estruturado, uma vez que as pastas principais devem estar abaixo da pasta public_html do seu site. Um outro problema que encontrava era aparecer no endereço o nome da pasta public, por exemplo, http://localhost/app-de-teste/public/controller/action

A solução é bem simples.

  1. Remova o conteúdo da pasta public e jogue na pasta root. Se estiver iniciando com a sua aplicação deve haver somente um arquivo index.php
  2. Abra esse arquivo e na linha:
    defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

    altere para:

    defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));
  3. Crie um arquivo .htaccess na raiz do seu diretório e insira esta expressão regular:
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule !.(js|gif|jpg|png|css|txt)$ index.php?rt=$1 [L,QSA]

O que é feito com tudo isso? A alteração do caminho que é necessário para sua aplicação rodar e o segundo permite que se acessem arquivos (-f) e diretórios (-d) caso existam.