Hemos mencionado al archivo APP_DIR/public/.htaccess
cuando hablamos sobre
la estructura de carpetas típica. Ahora vamos a entender el rol de este archivo.
El archivo .htaccess
(«hypertext access») es de hecho un archivo de configuración
del servidor web Apache que permite sobrescribir parte de la configuración global
del servidor. El archivo .htaccess
es un archivo de configuración a nivel de
carpetas esto significa que afecta solo a la carpeta donde esta guardado y
a sus subcarpetas.
El contenido del archivo .htaccess
se presenta más abajo:
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]
La línea 1 le dice al servidor web Apache que habilite el motor de rescritura
de URL (mod_rewrite
). El motor de rescritura modifica las peticiones URL
entrantes basado en un expresión regular. Esto permite asociar URLs
arbitrarias a las URLs de nuestra estructura interna de la manera que queramos.
Las líneas 4-7 definen las reglas de rescritura que dicen al servidor web que
si el cliente (navegador web) pide un archivo que existe en la carpeta raíz de
documentos entonces se regrese el contenido del archivo como una respuesta HTTP.
Como nosotros tenemos nuestra carpeta public
dentro de la raíz de documentos
del sitio virtual se permite a los usuarios del sitio ver todos los archivos
que están dentro de la carpeta public
incluyendo el index.php
, los archivos
CSS, los archivos JavaScript y los archivos de imágenes.
Las líneas 14-16 definen las reglas de rescritura que le dicen a Apache que debe
hacer si el usuario pide un archivo que no existe en la raíz
de documentos. En este caso, el usuario será redirigido al archivo index.php
.
La tabla 2.1 contiene varios ejemplos de rescritura de URL. La primera y
segunda URL apuntan a archivos que existen, así que mod_rewrite
regresa la
ruta del archivo solicitado. La URL del tercer ejemplo apunta al archivo
htpasswd
que no existe (lo que puede ser la señal del ataque de un cracker)
y basado en nuestras reglas de rescritura el motor regresa el archivo
index.php
.
URL solicitada | URL sobrescrita |
---|---|
http://localhost/index.php |
El archivo existe; se regresa el archivo local APP_DIR/public/index.php . |
http://localhost/css/bootstrap.css |
El archivo existe; se regresa el archivo local APP_DIR/public/css/bootstrap.css |
http://localhost/htpasswd |
El archivo no existe; en su lugar se regresa APP_DIR/public/index.php . |