A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

2.7. Hypertext Access File (.htaccess)

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.

Tabla 2.1. Ejemplo de rescritura de URL
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.

Top