La guía definitiva para archivos .htaccess

Los archivos de configuración .htaccess de Apache han desconcertado a innumerables desarrolladores. Este tutorial tiene como objetivo romper esta confusión centrándose en ejemplos y descripciones completas. Entre los beneficios de aprender la configuración de .htaccess se encuentra la transferencia automática de contenido de su contenido, el suministro de URL más amigables, la prevención de vínculos, la mejora del almacenamiento en caché y más.

Buscando una solución rápida?

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

.htaccess Builder en Envato Market

Introducción:

He leído una serie de artículos .htaccess en línea. Voy a admitir descaradamente
No fui más allá de la primera página de los resultados de Google. Me sorprendí cuando
De hecho, leí los artículos y descubrí que ninguno de ellos explicaba lo que Apache era en realidad
obra. Eran simplemente una colección de trucos populares o útiles o
Fragmentos de código reutilizables. Eso está muy bien, pero el clásico.
argumento es:

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

En este artículo voy a tratar de no solo mostrarte ejemplos útiles.
.Directivas de htaccess, pero explique exactamente qué es
continuando De esta manera, comprenderá los principios básicos y luego podrá ampliar el
ejemplos o cree nuevos comandos para su propio uso en cualquier forma creativa o útil
puedes llegar a.

Mi enfoque estará en Apache 2, sin embargo, mucho de esto se aplicará
a Apache 1.3 y trataré de señalar las diferencias que conozco.

Finalmente, este tutorial tendrá más sentido si lo lees en orden.
Intento unir mis ejemplos, y construirlos a partir de ellos, en tal
Manera en que puedes probarlas tú mismo y seguirlas.

¿Qué es .htaccess ?:

Para citar a apache:

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

Directivas

"Directivas" es la terminología que utiliza Apache para los comandos en Apache
Archivos de configuración. Normalmente son comandos relativamente cortos, típicamente
Pares de valores clave, que modifican el comportamiento de Apache.. Un archivo .htaccess permite
los desarrolladores ejecutarán un montón de estas directivas sin requerir acceso a
El archivo de configuración del servidor central de Apache, a menudo llamado httpd.conf.
Este archivo,
httpd.conf, se suele denominar "archivo de configuración global" y lo haré
refiérase a él con ese nombre o su nombre de archivo corto equivalente.

Esta característica es ideal para muchas empresas de alojamiento que implementan un alojamiento compartido
ambiente. La empresa de alojamiento no permitirá a sus clientes acceder a la
archivo de configuración global, que en última instancia 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 de Apache en su propio
Directorios y subdirectorios. Por supuesto que también es útil para el single.
desarrollador, como veras.

Vale la pena mencionar que cualquier cosa que se pueda hacer con un archivo .htaccess puede
Se realizará 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 ser
habilitado en el archivo httpd.conf para ejecutarse. Una vez habilitado,
su poder se puede limitar a ciertos "contextos" para que se les permita
para anular algunas configuraciones pero no otras. Esto le da a los administradores del sistema
más control sobre lo que dejan que otros desarrolladores se salgan con la suya
.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 se puede colocar dentro de un sección. No dejes que esto se confunda
tú. El archivo httpd.conf típico define un DocumentRoot y la mayoría
del archivo contendrá Directivas dentro de un sección que trata
con ese directorio. Esto incluye la directiva AllowOverride.

El valor predeterminado es en realidad "Todos" y, por lo tanto, los archivos .htaccess están habilitados por
defecto. Un valor alternativo sería "Ninguno", lo que significaría que son
completamente discapacitado Hay muchos otros valores que limitan la configuración de solo
ciertos contextos Algunos son:

  • AuthConfig - Directivas de autorización, como las que tratan con la autenticación básica.
  • FileInfo: directivas relacionadas con la configuración de encabezados, documentos de error, cookies, reescritura de URL y más.
  • Índices - Personalización predeterminada de listas de directorios.
  • 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, Incluye y más.

Anulación completa de .htaccess

Os mostraré algunos ejemplos, sin sus correspondientes. secciones.
Aquí hay un ejemplo que permite la anulación completa de .htaccess:

# Permitir que los archivos .htaccess tengan toda su potencia AllowOverride All

Anulación limitada

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

# Sólo permita que los archivos .htaccess anulen los índices de AuthorConfig de Autorización e Índices AllowOverride

Comentarios

La primera línea en estos dos ejemplos son los comentarios de Apache. Inicio de comentarios
con el símbolo “#”. Esto es común a muchos archivos de configuración y secuencias de comandos
idiomas Tendré muchos comentarios en mis ejemplos para ayudar a explicar qué hacen las cosas..
Sin embargo, no son obligatorios, y en realidad es solo una preferencia personal sobre cuánto
Quiero comentar. No se requieren comentarios..

La segunda línea es la propia directiva AllowOverride. Esta es la sintaxis habitual de un
Directiva de apache. Primero está el nombre de la directiva "AllowOverride" seguido de un espacio
Lista separada de valores. Aunque esta sintaxis parece bastante floja; Siempre se cuidadoso.

A veces, incluso un solo error en su archivo httpd.conf o .htaccess resultará en un
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 manera, si algo sale mal con una modificación, tendrá
nada de qué preocuparse, ya que puede volver a su versión anterior de trabajo. voy a
También lo alentamos 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 haces
un error, será mucho más fácil rastrear lo que pudo haberlo causado.

Si alguna vez está confundido con la sintaxis de alguna directiva, vaya inmediatamente a la
Las directivas de Apache listan y revisan la "Sintaxis" que han listado en la tabla
para cada directiva individual. Haré todo lo posible para intentar explicarlo aquí.
(Estoy tratando de enseñar) pero mi explicación nunca puede ser tan buena como la
La propia documentación técnica formal. Nunca tengas miedo de la documentación, es
Su referencia más confiable y confiable. Intentaré 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 bastante posible, de hecho, es extremadamente probable que su empresa de alojamiento no lo haga.
le da acceso al archivo httpd.conf Entonces, ¿cómo saber si el soporte .htaccess está habilitado?
¿o no? No se preocupe, .htaccess es una característica muy común y útil que la mayoría de las empresas
Haber habilitado, o habilitará si lo pides educadamente..

Lo mejor sería consultar con su compañía de alojamiento. Si no es explícitamente
aparece en cualquier lugar de su plan de alojamiento, luego envíe un correo electrónico a su soporte. Este es un relativamente común
pregunta, por lo que es probable que ya tengan una respuesta lista para ti. Probablemente estarán dispuestos
para habilitar el servicio o al menos dar una razón por la cual no pueden permitirlo.

En cualquier caso, siempre puede darle una oportunidad y ver si funciona un simple archivo .htaccess!
En la descarga de muestra de este tutorial se incluyen dos formas en las que puede verificar si .htaccess
el soporte está habilitado Las dos carpetas son "is_htaccess_enabled" y "is_htaccess_enabled_2".
Déles una oportunidad, les explicaré qué está haciendo cada uno aquí..

is_htaccess_enabled

Este caso de prueba es muy simple. Utiliza una directiva para hacer que Apache luzca.
primero para el "índicegood.html ”antes de“ index.html ”. Si el soporte .htaccess es
habilitado, cuando apunta su navegador a la carpeta, Apache cargará el archivo .htaccess y sabrá que
debe mostrar el "índice
good.html ”página que contiene un mensaje verde que dice Enhorabuena!
Si el soporte de .htaccess no está habilitado, Apache ignorará de forma predeterminada el .htaccess
archivo y busca inmediatamente un archivo index.html.

# Esta directiva hará que Apache busque primero # para "index_good.html" antes de buscar "index.html" DirectoryIndex index_good.html index.html

DirectoryIndex

La directiva DirectoryIndex toma una lista separada por espacios de nombres de archivos potenciales.
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 usará esto
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 ve Apache existe.
Será el archivo que carga y muestra al cliente..

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

is_htaccess_enabled_2

Como dije anteriormente, un error de sintaxis en su archivo .htaccess causará que el servidor tenga problemas.
Puede usar esto para su ventaja para probar si su servidor tiene habilitado el soporte para .htaccess!
Aquí hay un ejemplo de un archivo .htaccess que está destinado a explotar.

# Este archivo está destinado a hacer que Apache explote. Esto ayudará a # determinar si .htaccess está habilitado o no! AHHHHHHHH

Está bastante claro que "AHHHHHHH" no es una directiva válida de Apache. Esto causará
un error si Apache intenta leer el archivo .htaccess! Así que, si vuelves una página gritando
“Error interno del servidor”, entonces su servidor está buscando archivos .htaccess. Si en realidad
Consulte el contenido del archivo index.html, es probable que se hayan deshabilitado. Aquí nuevamente están los casos buenos y malos:

AccessFileName

Por último, todavía es posible que el soporte .htaccess todavía esté habilitado, solo con
Ajustes únicos. Los administradores de sistemas pueden cambiar el nombre del archivo .htaccess solo
como cambiamos el nombre del archivo predeterminado que busca Apache. Esto es posible por
usando el AccessFileName
Directiva en el archivo de configuración global. Una vez más, lo mejor que se puede hacer en ese caso sería
Póngase en contacto con su empresa de alojamiento para obtener más información..

Consecuencias de los archivos .htaccess:

Antes de entrar en algunas de las cosas geniales que puedes hacer con los archivos .htaccess, tengo que
te diré en lo que te estás metiendo Como mencioné anteriormente estás permitiendo
anulando la configuración del servidor para un directorio y todos sus subdirectorios. Siempre
tenga en cuenta que está afectando a todos los subdirectorios, así como a la actual
directorio.

Además, cuando está habilitado, el servidor tendrá un impacto potencial en el rendimiento. La razon es porque, cada la solicitud del 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 serie de cosas. Primero porque Apache siempre busca los archivos .htaccess.
En cada solicitud, cualquier cambio en el archivo entrará en vigencia de inmediato..
Apache no los almacena en caché, e inmediatamente verá sus cambios en la próxima 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, entonces su servidor
comprobaría los siguientes archivos .htaccess:

/www/.htaccess /www/supercool/.htaccess /www/supercool/test/.htaccess

Estos posibles accesos de archivos (posibles porque los archivos pueden no existir) y sus
la ejecución (si existiera) tomará tiempo. Una vez más, mi experiencia es que es
imperceptible y no supera los beneficios y la flexibilidad que ofrece .htaccess
los archivos proporcionan a los desarrolladores.

Sin embargo, si esto le preocupa, siempre y cuando tenga acceso al archivo httpd.conf
Entonces siempre puedes poner tus directivas allí. Al establecer AllowOverride en "Ninguno"
Apache no buscará esos archivos .htaccess. Si realmente quieres, puedes poner
las directivas que deseaba poner en su archivo /www/supercool/test/.htaccess
directamente en httpd.conf de esta manera:

 # Poner las directivas aquí 

La desventaja de este enfoque es que tendrá que reiniciar el servidor Apache
En cada cambio para que recargue la nueva configuración..

Al final, todo se reduce a las preferencias personales o lo que permita su anfitrión..
Prefiero usar archivos .htaccess porque tengo la flexibilidad de colocarlos donde
Quiero, y sus efectos se activan de inmediato sin necesidad de reiniciar el servidor..

Inicio Simple - Listado de directorios - Índices:

Listados del directorio

Antes de entrar en cualquiera de las características complejas, comencemos con algo
simple, pero útil, para que pueda familiarizarse con el trabajo con archivos .htaccess.
Los listados de directorios son tan comunes que probablemente los haya encontrado en numerosas
veces navegando por la web.

Cuando un usuario solicita un directorio, Apache primero busca el archivo predeterminado. Normalmente, se llamará "index.html" o "index.php" o algo similar. Cuando no
encontrar uno de estos archivos, recurre al módulo mod_autoindex para
mostrar una lista de los archivos y carpetas en ese directorio. A veces esto
está habilitado, a veces deshabilitado, y otras veces desea
Hacer personalizaciones. Bueno, con .htaccess puedes manipular fácilmente estos listados!

Por defecto, las listas de directorios están habilitadas. Aquí hay un ejemplo de escenario..
Supongamos que tiene un montón 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 crea un archivo .htaccess
en el directorio que desea ocultar y añada la siguiente directiva:

# Deshabilitar los listados de directorios en este directorio y subdirectorios # Esto ocultará los archivos del público a menos que conozcan las URL directas Opciones - Índices

Directiva de opciones

Desglosando esto estamos usando la directiva de Opciones.
Esta directiva puede tomar una serie de valores (mencionados anteriormente). Si usted proporciona los valores
con un + o - como hice con -Indexes, entonces esto heredará el
Opciones que se habilitaron en directorios superiores y la configuración global.!
Si no proporciona un + o -, la lista que proporcione se convertirá en
la solamente Opciones habilitadas para ese directorio y sus subdirectorios. No se habilitarán otras opciones. Debido a que es posible que no sepa qué opciones se habilitaron anteriormente, lo más probable es que
use la sintaxis + o - a menos que esté absolutamente seguro de que solamente quiero ciertas opciones.

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

Forge Ahead - Autenticación básica

Bueno, tal vez deshabilitar totalmente el Índice de Directorio no es lo que quieres. Es más
Es probable que desee conservar los índices, pero que solo permita el acceso de ciertas personas..
Ahí es donde la autenticación básica puede ser muy útil. Este es el más común.
Tipo de autenticación en la web. Cuando el usuario intenta acceder a la página,
Verá el familiar diálogo Nombre de usuario / Contraseña. Sólo un usuario con la debida
Las credenciales podrán acceder a los contenidos..

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

  1. Configura un archivo que almacena nombres de usuario y contraseñas (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
contraseñas ".htpasswd". Esto se debe a que la herramienta de línea de comandos que se envía con
Apache que genera el par de nombre de usuario / contraseña cifrados es en realidad
llamado htpasswd! Si te sientes cómodo en la línea de comandos puedes usar el 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:

joe: $ apr1 $ QneYj /… $ 0G9cBfG2CdFGwia.AHFtR1

Tu salida puede ser diferente, eso está bien. Las contraseñas están hash con
Una sal al azar para hacerlos un poco más únicos y seguros. Una vez tu nombre de usuario
y la combinación de contraseña se ha agregado al archivo .htpasswd, entonces debería
agrega las siguientes líneas a tu archivo:

# Habilitar autenticación básica AuthType Basic # Esto es lo que se mostrará al usuario en el cuadro de diálogo de inicio de sesión. AuthName "Acceso a los archivos ocultos" # Esto debe editar. Es la ruta absoluta al archivo .htpasswd. AuthUserFile /path/to/.htpasswd # Esto permite a cualquier usuario que se encuentre dentro del archivo .htpasswd acceder al contenido # si proporciona el nombre de usuario y la contraseña adecuados. Requerir usuario valido

Esos comandos están bien documentados. El único desafío real es que tú
tiene que configurar correctamente la ruta al archivo .htpasswd que acaba de
generado. Esta es una ruta absoluta completa desde la raíz absoluta de
servidor. Además, como la ruta del archivo .htpasswd es absoluta, es buena
practicar ponerlo en un directorio fuera del directorio donde Apache
Sirve páginas web al público. De esa manera los usuarios maliciosos no podrán
para acceder fácilmente a la lista sin formato de usuarios / contraseñas almacenados en .htpasswd.

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

La autenticación básica es agradable y fácil, pero no es una solución total.
Las contraseñas se envían a través del cable, Base 64 codificada, en texto plano. Si tu
Si desea una autenticación más segura, debe acoplar la autenticación básica.
con https, un más
protocolo 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 quieres entender lo que el resto de las directivas de Apache
tratar, usted debe tener algún conocimiento del protocolo. soy
Sólo voy a presentar un resumen muy rápido aquí. También haré un esfuerzo.
Para explicar lo que están haciendo las directivas más complejas, pero hará
más sentido si entiendes los encabezados HTTP.

El resumen rápido es que HTTP no tiene 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 de encabezado, luego una sección opcional que contiene los datos en sí.,
si hay algun dato.

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

La información del encabezado de respuesta a menudo especifica información genérica del servidor (Apache, PHP,
Versiones de Perl, etc.), la codificación del contenido, la longitud, el mimo / tipo y más. Ahí
hay una gran cantidad de encabezados HTTP para especificar aún más detalles como el Control de caché,
Redirecciones y códigos de estado. ¿Alguna vez has conseguido un 404? Ese fue el resultado de solicitar un
Archivo que el servidor no pudo encontrar, y por lo tanto envió un 404
Código de estado en su
Respuesta.

¿Qué tiene esto que ver con .htaccess? Bueno, puedes usar las directivas de Apache para
sobrescribir (configurar) o agregar nuevos encabezados (agregar) que se devuelven al cliente
en la sección del encabezado de la respuesta. Además, como verás en tutoriales posteriores.,
Una funcionalidad más avanzada, como la reescritura de URL, se ocupa de los encabezados entrantes.

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

# Agregue el siguiente encabezado a cada respuesta Encabezado agregue X-HeaderName "Valor de encabezado"

Solicitar un archivo en el mismo directorio que este archivo .htaccess muestra el
cabecera extra:

Probablemente pensaste que era peculiar que yo prefijara el encabezado personalizado con
"X-". Esto es en realidad una convención común que los desarrolladores utilizan para denotar 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 convencion es
mencionado 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
Úsalos como una técnica de depuración. Justo el otro día, hice una prueba para
Compruebe si ciertos módulos se habilitaron en un servidor web. escribí
la siguiente comprobación:

 Encabezado agregar X_ habilitado mod_gzip   Encabezado agregar mod_deflate habilitado para X 

Cuando hice mi próxima solicitud con mi navegador y verifiqué los encabezados de respuesta,
¡Mostró que ninguno de los módulos estaba encendido! Me puse en contacto con mi empresa de alojamiento y aceptaron la compresión gzip.!

Hay una diferencia entre el conjunto de encabezados y
Cabecera añadir. Con agregar, el encabezado será siempre obtener añadido
a la Respuesta. Incluso si sucede aparecer varias veces en la respuesta. Esto es más a menudo
Lo que te gustaría para los encabezados personalizados. Usted usaría set cuando quiera
reemplaza el valor de uno de los encabezados predeterminados que devuelve Apache. Un
Un ejemplo sería anular el mime / tipo especificado por Content-Type.
encabezado de un determinado archivo. Apache establecería el valor interno y luego
Utilícelo cuando imprima el encabezado predeterminado. No habrá
duplicados, y por lo tanto no hay posibilidad de interpretar un error o confusión
por el cliente. (En caso de que se lo pregunte, la especificación HTTP establece que, en
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 quitar los detalles fundamentales para que el próximo tutorial pueda discutir cosas más interesantes. Mi próximo artículo será
céntrese 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 son diseccionadas y explicadas en detalle..
  • Síganos en Twitter o suscríbase a la Fuente RSS de NETTUTS para obtener más artículos y artículos de desarrollo web diarios.

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