Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development
Code

La Última Guía para Archivos .htaccess

by
Difficulty:IntermediateLength:LongLanguages:

Spanish (Español) translation by Naudys Angulo (you can also view the original English article)

Los archivos de configuración .htaccess de Apache han desconcertado a innumerables desarrolladores. Este tutorial pretende romper esta confusión centrándose en ejemplos y descripciones detalladas. Entre los beneficios de aprender, la configuración de .htaccess es el gzip automático de tu contenido, proporcionando URLs más amigables, evitando hotlinks, mejorando el almacenamiento en caché, y más.

¿Buscas una Solución Rápida?

Este artículo le enseñará cómo configurar manualmente sus archivos .htaccess, pero si desea una solución simple y rápida, intente descargar .htaccess Builder desde Envato Market. Le permite entregar un archivo htaccess de forma rápida y sin esfuerzo sin tener que recordar nada sobre el lenguaje del servidor Apache utilizado para construir el archivo htaccess.

htaccess Builder on Envato Market
.htaccess Builder en Envato Market

Introducción:

He leído varios artículos .htaccess en línea.  Lo admitiré descaradamente
No pude ir más allá de la página principal de los resultados de Google. Me sorprendió cuando
De hecho, leí los artículos y descubrí que ninguno de ellos explicaba qué era Apache en realidad
haciendo. Eran simplemente una colección de trucos populares o 
fragmentos de código reutilizable. Eso está muy bien, pero el clásico
argumento es: 

"Dale a un hombre un pescado y comerá por un día. Enseña a un hombre a pescar y él
comerá toda la vida ".
- Confucio

En este artículo voy a intentar no solo a mostrarte ejemplos de usos
de directivas .htaccess, sino a explicar también exactamente qué está
pasando. De esta forma, comprenderá los principios básicos y luego puede ampliar los 
ejemplos o crear nuevos comandos para tu propio uso en cualquier forma creativa  o útil
que puedas idear.

Mi enfoque estará en Apache 2, sin embargo, gran parte de esto se aplicará
a Apache 1.3 y trataré de señalar cualquier diferencia que yo sepa.

Finalmente, este tutorial tendrá más sentido si lo lee en orden. 
Intento unir mis ejemplos y construir a partir de ellos, en tal 
forma en que puedes probarlos tú mismo y seguirlos. 

¿Qué es .htaccess?

Para citar a Apache:

Los archivos .htaccess (o "archivos de configuración distribuidos") proporcionan una forma de realizar
cambios de configuración por directorio. Un archivo, que contiene una o más 
directivas de configuración, se coloca en un directorio de documentos particular, y las
directivas se aplican a ese directorio y a todos sus subdirectorios. 

Directivas

"Directivas" es la terminología que Apache usa para los comandos en los archivos 
de configuración de Apache. Normalmente son comandos relativamente cortos, por lo general 
pares de valores clave, que modifican el comportamiento de Apache. Un archivo .htaccess permite a los desarrolladores ejecutar varias de estas directivas sin necesidad de acceder al  archivo de configuración del servidor central de Apache, a menudo denominado httpd.conf. Este archivo
httpd.conf, se conoce como el "archivo de configuración global" y 
y me referiré a él con ese nombre o su equivalente de nombre de archivo corto. 

Esta función es ideal para muchas empresas de hosting que implementan un entorno de alojamiento compartido. 
La empresa de alojamiento no permitirá a sus clientes acceder al
archivo de configuración global, que finalmente afecta a todos los clientes alojados en ese servidor. 
En cambio, al habilitar .htaccess, le dan a cada uno de sus clientes 
el poder de especificar y ejecutar sus propias directivas Apache en sus propios
directorios y subdirectorios. Por supuesto, también es útil para el desarrollador individual,
como puedes ver.

Vale la pena mencionar que todo lo que se puede hacer con un archivo .htaccess 
se puede hacer en el archivo httpd.conf. Sin embargo, NO todo lo que se puede hacer en
httpd.conf se puede hacer en un archivo .htaccess. De hecho, los archivos .htaccess deben estar
habilitados en el archivo httpd.conf para poder ser ejecutados. Una vez habilitado,
su poder puede limitarse a ciertos "contextos" para que se les permita
anular algunas configuraciones pero no otras. Esto les da a los administradores
del sistema más control sobre lo que les permite a otros desarrolladores salirse con la suya en sus archivos
.htaccess.

Habilitando .htaccess:

Los archivos .htaccess normalmente están habilitados por defecto. Esto es realmente controlado 
por la Directiva AllowOverride en el archivo httpd.conf. Esta directiva
solo puede colocarse dentro de una sección. <Directory> No dejes que esto te confunda.
El archivo httpd.conf típico define un DocumentRoot y la mayoría
del archivo contendrá Directivas dentro de una sección <Directory>
que trata con ese directorio. Esto incluye la directiva AllowOverride.

El valor predeterminado es realmente "Todos" y, por lo tanto, los archivos .htaccess están habilitados de
forma predeterminada. Un valor alternativo sería "Ninguno" lo que significaría que están
completamente deshabilitados. Existen numerosos otros valores que limitan la configuración de solo
ciertos contextos. Algunos son:

  • AuthConfig: directivas de autorización, como las relacionadas con la autenticación básica. 
  • FileInfo: directivas que tratan de establecer encabezados, documentos de error, cookies, reescritura de URL y más.
  • Índices: personalizaciones de listado de directorios predeterminadas.
  • Límite: controle el acceso a las páginas de diferentes maneras.
  • Opciones: acceso similar a los índices pero incluye incluso
    más valores como ExecCGI, FollowSymLinks, Includes y más. 

Full .htaccess Anulación

Mostraré algunos ejemplos, sin sus correspondientes secciones <Directory>.
Aquí hay un ejemplo que permite anular por completo .htaccess: 

Anulación Limitada

Y aquí hay un ejemplo que toma un enfoque más detallado y solo permite
anular los contextos de Autorización e Índices, pero nada más:

Comentarios

La primera línea en ambos ejemplos son los comentarios de Apache. Comentarios comienzan
con el símbolo "#". Esto es común para muchos archivos de configuración y scripts
idiomas. Tendré muchos comentarios en mis ejemplos para ayudar a explicar lo que hacen las cosas.
Sin embargo, no son necesarios, y en realidad son solo preferencias personales sobre cuánto 
quiere comentar. Los comentarios no son obligatorios.

La segunda línea es la directiva AllowOverride. Esta es la sintaxis habitual de una 
Directiva Apache. Primero está el nombre de la directiva "AllowOverride" seguido de una lista de valores separados por espacios.
Aunque esta sintaxis parece bastante floja; Siempre se cuidadoso.

A veces, incluso un solo error en su archivo httpd.conf o .htaccess provocará una
fusión temporal del servidor, y los usuarios verán 500 - páginas de error interno del servidor.

Solo por esa razón, es una buena práctica hacer siempre una copia de seguridad de sus archivos httpd.conf y .htaccess antes de realizar un cambio o una adición. De esta forma, si algo sale mal con una modificación, no tendrás 
nada de qué preocuparse, porque puede volver a su versión anterior de trabajo. Voy a alentarte a hacer pequeños cambios a la vez y verificar que los cambios funcionen en  incrementos en lugar de hacer una serie de cambios a la vez. De esta manera, si cometes
un error, será mucho más fácil rastrear lo que pudo haberlo causado. 

Si alguna vez se confunde con la sintaxis de cualquier directiva, vaya inmediatamente a la 
lista de la Directiva Apache y revise la "Sintaxis" que han enumerado en la tabla
por cada directiva individual. Haré todo lo posible para tratar de explicarlo aquí 
(Estoy tratando de enseñar) pero mi explicación nunca puede ser tan buena como
documentación técnica formal en sí misma. Nunca tengas miedo de la documentación, es 
su referencia más confiable y confiable. Trataré de hacer las cosas más interesantes
aquí (¡woohoo!), pero al final, solo estoy dando un giro diferente a esos documentos.

Comprobando si .htaccess está Habilitado: 

Es muy posible, de hecho es muy probable, que su empresa de hosting no le dé 
acceso al archivo httpd.conf. Entonces, ¿cómo sabe si el soporte de .htaccess está habilitado 
o no? No se preocupe, .htaccess es una característica muy común y útil que la mayoría de las compañías habrán 
habilitado, o habilitará si lo pide cortésmente. 

Lo mejor que puede hacer es consultar con su empresa de hosting. Si no está enlistado explícitamente 
en algún lugar de su plan de hosting, entonces envíe un correo electrónico a su soporte.Esta es una pregunta relativamente común, 
por lo que es probable que ya tengan una respuesta lista para usted. Es probable que estén 
dispuestos a habilitar el servicio o al menos dar una razón por la que no lo permitan.

En cualquier caso, siempre puedes probarlo y ver si funciona un archivo .htaccess simple. 
En la descarga de ejemplo de este tutorial se incluyen dos formas que puede verificar para ver si está habilitado el soporte de .htaccess. 
Las dos carpetas son "is_htaccess_enabled" y "is_htaccess_enabled_2". 
Deles una oportunidad, les explicaré qué hace cada uno aquí.

is_htaccess_enabled 

Este caso de prueba es muy simple. Utiliza una directiva para hacer que Apache se vea 
first for the “indexgood.html” file before “index.html.” If .htaccess support is
enabled, when you point your browser to the folder, Apache will load the .htaccess file and know that debería mostrar la página "indexgood.html" que contiene un mensaje verde que dice ¡Felicitaciones! 
Si el soporte de .htaccess no está habilitado, Apache, de forma predeterminada
ignorará el archivo .htaccess e inmediatamente buscará un archivo index.html.

DirectoryIndex 

La directiva DirectoryIndex toma una lista separada por espacios de posibles nombres de archivos.
Cuando Apache recibe una URL de un directorio, y no una página directa (por ejemplo 
http://www.example.com y no http://www.example.com/index.html) Apache podrá utilizar esta
lista de archivos para buscar la página adecuada para cargar. Apache buscará los archivos
usando los valores en la lista de izquierda a derecha. El primer archivo que Apache ve existe 
será el archivo que carga y muestra al cliente.

Usando el archivo .htaccess anterior, aquí hay un ejemplo de casos buenos (habilitados) y malos (deshabilitados):

Good Apache Redirected
Bad htaccess Ignored

is_htaccess_enabled_2 

Como dije antes, un error de sintaxis en su archivo .htaccess causará que el servidor sufra. 
Puede usar esto para su ventaja para probar si su servidor tiene habilitada la compatibilidad con .htaccess
Aquí hay un ejemplo de un archivo .htaccess que está destinado a explotar. 

Está bastante claro que "AHHHHHHH" no es una directiva de Apache válida. Esto causará 
un error si Apache intenta leer el archivo .htaccess! Por lo tanto, si vuelve una página gritando
"Error interno del servidor", entonces su servidor está buscando archivos .htaccess. Si tu realmente
ves los contenidos del archivo index.html, es probable que se hayan deshabilitado. Aquí nuevamente están los casos buenos y malos: 

Good Internal Service Error
Bad htaccess Ignored

AccessFileName

Finalmente, aún es posible que el soporte .htaccess todavía esté habilitado, solo con 
configuraciones únicas. Los administradores de sistemas pueden cambiar el nombre del archivo .htaccess solo 
como hemos cambiado el nombre del archivo predeterminado que Apache busca. Esto es posible 
utilizando la directiva AccessFileName 
en la configuración global. Una vez más, lo mejor que puede hacer en ese caso sería 
ponerse en contacto con su empresa de hosting para obtener más información.

Consecuencias de los archivos .htaccess:

Antes de entrar en algunas de las mejores cosas que puedes hacer con los archivos .htaccess, tengo que 
decirte en qué te estás metiendo. Como mencioné anteriormente, está permitiendo 
reemplazar configuraciones de servidor para un directorio y todos sus subdirectorios. Siempre tenga en cuenta que está afectando a todos los subdirectorios, así como también al
directorio actual. 

Además, cuando está habilitado, el servidor sufrirá un posible golpe de rendimiento. La razón es porque, cada solicitud de servidor, si el soporte de .htaccess está habilitado, cuando Apache va a buscar el archivo solicitado para el cliente, tiene que buscar un archivo .htaccess en cada directorio que conduce al lugar donde se almacena el archivo.

Esto significa una cantidad de cosas. Primero, porque Apache siempre busca los archivos .htaccess
en cada solicitud, cualquier cambio al archivo tendrá efecto inmediatamente. 
Apache no los almacena en caché, e inmediatamente verá sus cambios en la siguiente solicitud.
Sin embargo, esto también significa que Apache tendrá que hacer un trabajo adicional para cada solicitud.
Por ejemplo, si un usuario solicita /www/supercool/test/index.html, su servidor
verificará los siguientes archivos .htaccess:

Estos posibles accesos de archivos (potencial porque los archivos pueden no existir) y su 
ejecución (si existieran) llevará tiempo. Nuevamente, mi experiencia es que 
no se nota y no supera los beneficios y la flexibilidad que los archivos .htaccess
brindan a los desarrolladores.

Sin embargo, si esto le preocupa, siempre y cuando tenga acceso al archivo httpd.conf
entonces siempre puede poner sus directivas allí. Al configurar AllowOverride como "Ninguno"
Apache no buscará esos archivos .htaccess. Si realmente lo desea, puede colocar
las directivas que desea colocar en su archivo /www/supercool/test/.htaccess
directamente en httpd.conf como se muestra a continuación: 

La desventaja de este enfoque es que tendrá que reiniciar el servidor Apache
en cada cambio para que vuelva a cargar la nueva configuración.

Al final todo se reduce a preferencia personal o lo que sea que tu anfitrión permita. 
Prefiero usar archivos .htaccess porque tengo la flexibilidad de ubicarlos donde
quiero y sus efectos se transmiten inmediatamente sin necesidad de reiniciar el servidor.

Inicio simple - Lista de directorios - Índices:

Lista de Directorios:

Antes de entrar en cualquiera de las características complejas, comencemos con algo
simple, pero útil, para que pueda obtener una sensación de trabajo con archivos .htaccess. 
Los listados de directorios son tan comunes que probablemente los haya visto muchas veces
navegando por la web. 

Cuando un usuario solicita un directorio, Apache primero busca el archivo predeterminado. Por lo general, se llamará "index.html" o "index.php" o algo similar. Cuando no encuentra
uno de estos archivos, vuelve al módulo mod_autoindex para
mostrar una lista de los archivos y carpetas en ese directorio. A veces esto está 
habilitado, a veces desactivado, y a veces deseas
hacer personalizaciones. ¡Bien, con .htaccess puede manipular fácilmente estos listados!

Por defecto, las listas de directorios están habilitadas. Aquí hay un escenario de ejemplo.
Supongamos que tiene un grupo de archivos multimedia que está almacenando en su servidor web,
y desea ocultarlos del público y los motores de búsqueda para que nadie pueda 
robar estos archivos. ¡Eso es muy fácil de hacer! Simplemente cree un archivo .htaccess
en el directorio que desea ocultar y agregue la siguiente directiva:

Directiva de Opciones

Rompiéndolo, estamos usando la directiva Options.
Esta directiva puede tomar una serie de valores (mencionados anteriormente). Si proporciona los valores
con un + o - como hice con -Indexes, ¡esto heredará
las Opciones que fueron habilitadas en directorios superiores y la configuración global!
Si no proporciona un + o -, la lista que proporcione se convertirá
en las únicas opciones habilitadas para ese directorio y sus subdirectorios. No se habilitarán otras opciones. Como es posible que no sepa qué Opciones se habilitaron previamente, lo más probable
es que use la sintaxis + o - a menos que esté absolutamente seguro de que solo quiere ciertas Opciones.

Ahora, con esa directiva en su archivo .htaccess, cuando apunta su navegador a ese directorio 
ya no podrá ver los archivos. Aquí está el antes y el después:

Before Normal Directory Listing
After Forbidden Access

Forja por Delante - Autenticación Básica

De acuerdo, tal vez deshabilitar totalmente el índice del directorio no es lo que quieres. Es más
probable que quiera mantener los índices pero solo permita el acceso a ciertas personas.
Ahí es donde la Autenticación Básica puede ser muy útil. Este es el tipo más común
de Autenticación en la web. Cuando el usuario intente acceder a la página, verá 
el diálogo familiar de Nombre de usuario / Contraseña. Solo un usuario 
con las credenciales adecuadas podrá acceder a los contenidos.

Para la autenticación básica, solo hay dos pasos. 

  1. Configure un archivo que almacene nombres de usuario y contraseña (encriptado).
  2. Agregue algunas líneas a .htaccess para usar ese archivo.

Tradicionalmente, los desarrolladores web han nombrado el archivo que almacena los nombres de usuario y las
contraseñas ".htpasswd". Esto se debe a que la herramienta de línea de comandos que se envía con
Apache y que genera el par de nombre de usuario / contraseña cifrados se llama
htpasswd. Si se siente cómodo en la línea de comando, puede usar la herramienta htpasswd
sin embargo, hay muchas herramientas en línea que generarán la salida con la misma facilidad.

Creé un archivo .htpasswd de muestra para un usuario "joe" con contraseña "cool". 
Tiré esos valores en la herramienta en línea vinculada y produjo:

Tu salida puede ser diferente, está bien. Las contraseñas son hash con 
una sal al azar para que sean un poco más único y seguro. Una vez que su combinación de nombre de usuario
y contraseña se haya agregado al archivo .htpasswd, debe
agregar las siguientes líneas a su archivo:

Esos comandos están bien documentados. El único desafío real es que
debe establecer correctamente la ruta al archivo .htpasswd que acaba
de generar. Esta es una ruta absoluta completa desde la raíz absoluta del
servidor. Además, como la ruta del archivo .htpasswd es absoluta, es una buena
práctica colocarla en un directorio fuera del directorio donde Apache
le brinda al público páginas web. De esa forma los usuarios maliciosos no podrán 
para obtener acceso fácilmente a la lista sin procesar de usuarios/contraseñas almacenadas en .htpasswd. 

Una vez que esté todo configurado, cuando alguien intente acceder a la página
recibirá el siguiente diálogo:

Login Dialog

La autenticación básica es agradable y fácil, pero no es una solución total. 
Las contraseñas se envían por cable, Base 64 Encoded, en texto sin formato. Si desea
una autenticación más segura, debe asociar la Autenticación Básica 
con https, un protocolo
más seguro. Ese es un tema para otro momento.

Encabezados 

El protocolo central de la web es el Protocolo de transferencia de hipertexto (HTTP).
Si realmente quiere entender qué trata el resto de las directivas Apache 
debe tener algún conocimiento del protocolo. Solo voy 
 a suponer aquí un resumen muy rápido. También me esforzaré
por explicar qué hacen las directivas más complejas,  pero tendrá
más sentido si comprende los Encabezados HTTP.

El resumen rápido es que HTTP es sin estado. Con cada solicitud (desde el navegador)
y cada respuesta (desde el servidor web como Apache) hay dos secciones.
Una sección de información del encabezado, luego una sección opcional que contiene los datos en sí,
si hay algún dato. 

La información del encabezado de solicitud a menudo especifica el archivo que están
solicitando del servidor (index.html), cualquier información de estado que deben proporcionar
(como datos de cookies) y los tipos de mime que está dispuesto a aceptar desde el servidor
(text/html o incluso contenido codificado gzip). 

La información del encabezado de respuesta a menudo especifica la información del servidor genérico (Apache, PHP,
versiones de Perl, etc.), la codificación del contenido, la longitud, el mimo/tipo y más. Hay 
una gran cantidad de encabezados HTTP para especificar incluso más detalles como Control de Caché,
Redirecciones y Códigos de estado. ¿Alguna vez obtuviste un 404? Eso fue el resultado de solicitar un
archivo que el servidor no pudo encontrar y, por lo tanto, envió un
Código de Estado 404
en su respuesta.

¿Qué tiene esto que ver con .htaccess? Bueno, puede usar las directivas Apache para
sobrescribir (establecer) o agregar nuevos encabezados (agregar) que se envían nuevamente al cliente
en la sección Encabezado de la respuesta. Además, como verá en los tutoriales posteriores,
una funcionalidad más avanzada como la reescritura de URL se refiere a los encabezados entrantes.

Comencemos simple, agregaremos un encabezado a la Respuesta y veremos qué sucede:

Solicitar un archivo en el mismo directorio que este archivo .htaccess muestra el
encabezado adicional:

Custom Header Shown in Safaris Web Inspector

Probablemente pensaste que era peculiar que yo prefijara el encabezado personalizado con
"X-". En realidad, esta es una convención común que usan los desarrolladores para indicar que
el encabezado es un encabezado no estándar. Esto hace que sea muy fácil darse cuenta de que este encabezado es personalizado. Esta convención se
menciona brevemente aquí.

En una nota más cómica, algunas personas se han divertido un poco con los encabezados.
Este sitio  
señala algunos encabezados bastante inusuales que se encuentran en toda la web.

Sin embargo, realmente quiero mostrarte cómo crear encabezados para que puedas
usarlos como una técnica de depuración. Justo el otro día, realicé una prueba para
verificar si ciertos módulos estaban habilitados en un servidor web. Escribí
el siguiente cheque: 

Cuando hice mi próxima solicitud con mi navegador y verifiqué los Encabezados de Respuesta, ¡se
demostró que ninguno de los módulos estaba activado! Me puse en contacto con mi empresa de alojamiento, ¡y aceptaron habilitar la compresión gzip! 

Hay una diferencia entre el conjunto de encabezado y
el complemento de encabezado. Con add, el encabezado siempre se agregará 
a la respuesta. Incluso si sucede aparecer varias veces en la respuesta. Con mayor frecuencia 
esto es lo que desearía para los encabezados personalizados. Utilizaría establecer cuando desee anular el
valor de uno de los encabezados predeterminados que devuelve Apache. Un 
ejemplo sería anular el mimo/tipo especificado por el encabezado Content-Type
para un determinado archivo. Apache establecería el valor interno y luego
lo usaría cuando imprima el encabezado predeterminado. No habrá
duplicados, y por lo tanto, ninguna posibilidad de interpretar un error o confusión
por parte del cliente. (En caso de que se lo pregunte, la especificación HTTP indica que, en
el caso de duplicados, el cliente siempre debe usar el último valor especificado
para ese encabezado duplicado) 

Conclusión:

He revisado algunas directivas básicas de Apache con bastante detalle. Quería sacar los detalles fundamentales del camino para que el siguiente tutorial pueda discutir cosas más geniales. Mi próximo artículo
se centrará en algunas de las funciones más útiles que puede habilitar con .htaccess. 
Estos temas incluirán:

  • Codificación GZip de contenido para Apache 1.3 y Apache 2 
  • Una descripción completa de mod_rewrite y muchos ejemplos
    que se analizan y explican en detalle. 
  • Síganos en Twitter, o suscríbase a NETTUTS RSS Feed para obtener más artículos y comentarios sobre el desarrollo web diario.

Y no se olvide, si está luchando para seguir esto, otra opción es probar la utilidad .htaccess Builder disponible en Envato Market.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.