Nós mencionamos o arquivo APP_DIR/public/.htaccess
quando falamos sobre
estrutura de pastas. Agora vamos tentar entender o papel desse arquivo.
O arquivo .htaccess
(hypertext access) é na verdade arquivo de configuração do servidor web Apache
que permite sobrescrever a configuração global do servidor web.
O arquivo .htaccess
é uma configuração no nível de diretórios, o que significa que
afeta apenas seu diretório próprio e todos os subdiretórios.
O conteúdo do arquivo .htaccess
é apresentado abaixo:
RewriteEngine On
# The following rule tells Apache that if the requested filename
# exists, simply serve it.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]
# The following rewrites all other queries to index.php. The
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting or installed the project in a subdirectory,
# the base path will be prepended to allow proper resolution of
# the index.php file; it will work in non-aliased environments
# as well, providing a safe, one-size fits all solution.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}/index.php [L]
A linha 1 informa aoApache para habilitar o mecanismo de reescrita de URL (mod_rewrite
).
O mecanismo de reescrita modifica as solicitações de URL recebidas, com base na regular expressions.
Isso permite que você mapeie URLs arbitrárias em sua estrutura de URL interna da maneira que desejar.
As linhas 4 a 7 definem as regras de rewrite que informam ao servidor da Web que, se o cliente (navegador da Web)
solicita um arquivo que existe no diretório raiz do documento, do que para retornar o conteúdo desse diretório
arquivo como resposta HTTP. Porque nós temos nosso diretório public
dentro da raiz de documentos do host virtual,
permitimos que os usuários do site vejam todos os arquivos dentro do diretório public
, incluindo index.php
,
Arquivos CSS, arquivos JavaScript e arquivos de imagem.
As linhas 14 a 16 definem regras do rewrite informam ao Apache o que fazer se o usuário do site solicitar um arquivo
que não existe na raiz do documento. Nesse caso, o usuário deve ser redirecionado para index.php
.
A Tabela 2.1 contém vários exemplos de rewrite de URL. Os primeiros e segundos URLs apontam para
arquivos, então mod_rewrite
retorna os caminhos de arquivos solicitados. O URL no terceiro exemplo
aponta para um arquivo inexistente htpasswd
(que pode ser um sintoma de um ataque de hacker),
e com base em nossas regras de reescrita, o mecanismo retorna o arquivo index.php
.
**URL Solicitada* | URL Reescrita |
---|---|
http://localhost/index.php |
O arquivo existe, retorna para arquivo local APP_DIR/public/index.php |
http://localhost/css/bootstrap.css |
O arquivo existe, retorna para arquivo local APP_DIR/public/css/bootstrap.css |
http://localhost/htpasswd |
Arquivo não existe; retorna APP_DIR/public/index.php |