Está en la página 1de 8

16/6/2016 Trucos 

y ejemplos de configuración del archivo htaccess de Apache

Trucos y ejemplos de configuración del archivo htaccess
de Apache

Este artículo recopila los trucos y ejemplos de configuración más útiles para el arhivo .htaccess del
servidor web Apache.

Redirección y reescritura de URL

Para que funcionen correctamente los ejemplos de configuración mostrados en esta sección, debes tener el
módulo mod_rewrite instalado y activado en el servidor.

Forzar a que todas las URL empiecen por www

Esta configuración funciona solamente para las URL no seguras que empiezan por http://:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^ejemplo\.com [NC] 
RewriteRule ^(.*)$ http://www.ejemplo.com/$1 [L,R=301,NC]

Esta configuración funciona tanto para las URL seguras (https://) como para las URL normales
(http://):

RewriteCond %{HTTP_HOST} !^$ 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Forzar a que ninguna URL empiece por www

Esta configuración funciona solamente para las URL no seguras que empiezan por http://:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^www\.ejemplo\.com [NC] 
RewriteRule ^(.*)$ http://ejemplo.com/$1 [L,R=301]

Forzar a que todas las URL sean seguras y empiecen por https

RewriteEngine on 
RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Forzar a que todas las URL acaben con la barra /

RewriteCond %{REQUEST_URI} /+[^\.]+$ 

http://librosweb.es/tutorial/trucos­y­ejemplos­de­configuracion­del­archivo­htaccess­de­apache/ 1/8
16/6/2016 Trucos y ejemplos de configuración del archivo htaccess de Apache

RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

Redirigir páginas individuales

Redirect 301 /pagina_antigua.html http://www.ejemplo.com/nueva_pagina.html 
Redirect 301 /pagina_antigua_2.html http://www.ejemplo.com/directorio/

Redirigir todo un sitio web

Redirect 301 / http://nuevo_sitio.com/

A pesar de que esta configuración sencilla no lo parezca, en realidad se están redirigiendo todos los
enlaces viejos al nuevo sitio, no solo la portada del sitio.

Seguridad

Impedir cualquier acceso a un sitio web

La siguiente configuración impide, sin excepción, todas las conexiones a tu sitio web, por lo que es una
forma rápida de "apagarlo" y hacerlo desaparecer de Internet:

Deny from All 
  
# en Apache 2.4, utiliza lo siguiente 
# Require all denied

Impedir cualquier acceso salvo aquellos autorizados

Order deny, allow 
Deny from All 
Allow from xxx.xxx.xxx.xxx 
  
# en Apache 2.4, utiliza lo siguiente 
# Require ip xxx.xxx.xxx.xxx

Sustituye xxx.xxx.xxx.xxx por la dirección IP desde la que quieres permitir el acceso al sitio. Esta
configuración también soporta la definición de rangos de direcciones IP.

Permitir todos los accesos salvo aquellos desautorizados

La siguiente configuración es la contraria de la configuración mostrada anteriormente, ya que permite el
acceso desde cualquier dirección IP salvo las indicadas explícitamente:

Order deny, allow 
Allow from All 
Deny from xxx.xxx.xxx.xxx 

http://librosweb.es/tutorial/trucos­y­ejemplos­de­configuracion­del­archivo­htaccess­de­apache/ 2/8
16/6/2016 Trucos y ejemplos de configuración del archivo htaccess de Apache

Deny from xxx.xxx.xxx.yyy 
  
# en Apache 2.4, utiliza lo siguiente 
# Require not ip xxx.xxx.xxx.xxx 
# Require not ip xxx.xxx.xxx.yyy

Impedir el acceso a los archivos y directorios ocultos

Los archivos y directorios ocultos (es decir, aquellos cuyo nombre empieza con un punto) normalmente no
son públicos, por lo que el servidor web no debería servirlos:

RewriteCond %{SCRIPT_FILENAME} ‐d [OR] 
RewriteCond %{SCRIPT_FILENAME} ‐f 
RewriteRule "(^|/)\." ‐ [F]

Entre otros, esta configuración protege archivos como .htaccess y .htpasswd y directorios como .git y
.hg.

Si lo prefieres, también puedes devolver un error de tipo 404 (Not Found) para confundir un poco más a los
atacantes:

RedirectMatch 404 /\..*$

Impedir que se pueda acceder a archivos con contenidos sensibles

Las siguientes extensiones corresponden a los archivos que pueden contener información sensible, como
por ejemplo: archivos de log con información detallada del servidor (.log), copias de seguridad creadas
por editores como Vi/Vim (.swp), comandos de consola (.sh), archivos de configuración (.config, .ini),
etc.

<FilesMatch "(\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|swp)|~)$"> 
    Order allow,deny 
    Deny from all 
    Satisfy All 
</FilesMatch>

Impedir que se pueda ver el listado de contenidos de un directorio

Options All ‐Indexes

Impedir que otros sitios web enlacen a tus imágenes

La siguiente configuración impide que cualquier sitio web externo pueda enlazar a tus imágenes para
"robártelas". Cambia el valor ejemplo.com por tu propio dominio, de manera que solamente tu puedas
enlazar a tus imágenes:

http://librosweb.es/tutorial/trucos­y­ejemplos­de­configuracion­del­archivo­htaccess­de­apache/ 3/8
16/6/2016 Trucos y ejemplos de configuración del archivo htaccess de Apache

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?ejemplo.com [NC] 
RewriteRule \.(jpg|jpeg|png|gif)$ ‐ [NC,F,L]

Proteger el acceso a un directorio mediante contraseña

Primero debes crear un archivo llamado .htpasswd con el comando htpasswd. Este archivo se debe
guardar en cualquier directorio que no sea directamente accesible mediante el servidor web:

$ htpasswd ‐c /home/usuario/.htpasswd nombre_usuario

Y ahora ya puedes usar este archivo para proteger con contraseña el acceso a cualquier directorio:

AuthType Basic 
AuthName "Zona Segura" 
AuthUserFile /home/usuario/.htpasswd 
Require valid‐user

Proteger uno o varios archivos mediante contraseña

AuthName "Zona Segura" 
AuthType Basic 
AuthUserFile /home/usuario/.htpasswd 
  
<Files "archivo_secreto.zip"> 
Require valid‐user 
</Files> 
  
<FilesMatch ^(factura\d+\.pdf)$> 
Require valid‐user 
</FilesMatch>

Mejorar el rendimiento

Comprimir archivos

<IfModule mod_deflate.c> 
  
    # Forzar compresión también para las cabeceras malformadas 
    # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing‐beyond‐gzipping 
    <IfModule mod_setenvif.c> 
        <IfModule mod_headers.c> 
            SetEnvIfNoCase ^(Accept‐EncodXng|X‐cept‐Encoding|X{15}|~{15}|‐{15})$ 
^((gzip|deflate)\s*,?\s*)+|[X~‐]{4,13}$ HAVE_Accept‐Encoding 

http://librosweb.es/tutorial/trucos­y­ejemplos­de­configuracion­del­archivo­htaccess­de­apache/ 4/8
16/6/2016 Trucos y ejemplos de configuración del archivo htaccess de Apache

            RequestHeader append Accept‐Encoding "gzip,deflate" env=HAVE_Accept‐
Encoding 
        </IfModule> 
    </IfModule> 
  
    # Comprimir los contenidos que sean de cualquiera de estos tipos 
    <IfModule mod_filter.c> 
        AddOutputFilterByType DEFLATE application/atom+xml \ 
                                      application/javascript \ 
                                      application/json \ 
                                      application/rss+xml \ 
                                      application/vnd.ms‐fontobject \ 
                                      application/x‐font‐ttf \ 
                                      application/x‐web‐app‐manifest+json \ 
                                      application/xhtml+xml \ 
                                      application/xml \ 
                                      font/opentype \ 
                                      image/svg+xml \ 
                                      image/x‐icon \ 
                                      text/css \ 
                                      text/html \ 
                                      text/plain \ 
                                      text/x‐component \ 
                                      text/xml 
    </IfModule> 
  
</IfModule>

Utilizar la cabecera Expires de HTTP

La cabecera Expires de HTTP indica al navegador la fecha a partir de la cual un recurso se considera "no
válido" y debe volver a solicitarse al servidor en vez de servirse directamente desde la caché.

La recomendación para muchos de los archivos estáticos (CSS, JavaScript, imágenes, etc.) consiste en
establecer una fecha de expiración muy lejana (1 año por ejemplo). No obstante, si los nombres de los
archivos no incluyen información sobre su versión, entonces es mejor que la expiración no sea tan lejana (1
semana por ejemplo).

Utiliza la siguiente configuración para indicar la fecha de expiración de todos los archivos estáticos
habituales de las aplicaciones web:

<IfModule mod_expires.c> 
    ExpiresActive on 
    ExpiresDefault                                      "access plus 1 month" 
  
  # CSS 
    ExpiresByType text/css                              "access plus 1 year" 

http://librosweb.es/tutorial/trucos­y­ejemplos­de­configuracion­del­archivo­htaccess­de­apache/ 5/8
16/6/2016 Trucos y ejemplos de configuración del archivo htaccess de Apache

  
  # Archivos relacionados con AJAX y Web Sockets 
    ExpiresByType application/json                      "access plus 0 seconds" 
    ExpiresByType application/xml                       "access plus 0 seconds" 
    ExpiresByType text/xml                              "access plus 0 seconds" 
  
  # Favicon 
    ExpiresByType image/x‐icon                          "access plus 1 week" 
  
  # Componentes HTML (HTCs) 
    ExpiresByType text/x‐component                      "access plus 1 month" 
  
  # HTML 
    ExpiresByType text/html                             "access plus 0 seconds" 
  
  # JavaScript 
    ExpiresByType application/javascript                "access plus 1 year" 
  
  # Manifest 
    ExpiresByType application/x‐web‐app‐manifest+json   "access plus 0 seconds" 
    ExpiresByType text/cache‐manifest                   "access plus 0 seconds" 
  
  # Fotos, vídeos y audio 
    ExpiresByType audio/ogg                             "access plus 1 month" 
    ExpiresByType image/gif                             "access plus 1 month" 
    ExpiresByType image/jpeg                            "access plus 1 month" 
    ExpiresByType image/png                             "access plus 1 month" 
    ExpiresByType video/mp4                             "access plus 1 month" 
    ExpiresByType video/ogg                             "access plus 1 month" 
    ExpiresByType video/webm                            "access plus 1 month" 
  
  # Canales RSS y Atom 
    ExpiresByType application/atom+xml                  "access plus 1 hour" 
    ExpiresByType application/rss+xml                   "access plus 1 hour" 
  
  # Fuentes web 
    ExpiresByType application/font‐woff                 "access plus 1 month" 
    ExpiresByType application/vnd.ms‐fontobject         "access plus 1 month" 
    ExpiresByType application/x‐font‐ttf                "access plus 1 month" 
    ExpiresByType font/opentype                         "access plus 1 month" 
    ExpiresByType image/svg+xml                         "access plus 1 month" 
</IfModule>

Desactivar la cabecera ETag de HTTP

Eliminar la cabecera ETag de HTTP puede ser útil en algunas situaciones, ya que impide a los proxys y a
los navegadores cachear los contenidos en función de esta cabecera. En la práctica, esto fuerza a que los

http://librosweb.es/tutorial/trucos­y­ejemplos­de­configuracion­del­archivo­htaccess­de­apache/ 6/8
16/6/2016 Trucos y ejemplos de configuración del archivo htaccess de Apache

proxys y navegadores utilicen en su lugar las cabeceras Cache‐Control o Expires:

<IfModule mod_headers.c> 
    Header unset ETag 
</IfModule> 
FileETag None

Otros trucos

Definir opciones de configuración PHP

Utiliza la directiva especial php_value y a continuación, indica el nombre de la opción y su valor separado
por un espacio:

php_value <nombre‐opcion> <valor‐opcion>

Este ejemplo define el tiempo máximo de ejecución de los scripts PHP y el tamaño máximo de los archivos
que se pueden subir:

# For example: 
php_value upload_max_filesize 30M
php_value max_execution_time 600

Páginas de error personalizadas

ErrorDocument 400 /errores/error400.html 
ErrorDocument 401 /errores/error401.html 
ErrorDocument 403 /errores/error403.html 
ErrorDocument 404 /errores/error404.html 
ErrorDocument 500 /errores/error500.html

Forzar a que el navegador baje un archivo en vez de mostrarlo

La siguiente configuración hace que todos los archivos de tipo Markdown (extensión .md) se descarguen
en vez de mostrarse dentro del navegador. Cambia la extensión .md por la extensión de los archivos que
quieres forzar que se descarguen:

<Files *.md> 
    ForceType application/octet‐stream 
    Header set Content‐Disposition attachment 
</Files>

Permitir la carga de fuentes desde diferentes dominios

Debido a las restricciones del Cross­origin Resource Sharing, es posible que algunas fuentes servidas a
través de una CDN no funcionen en Firefox o Internet Explorer. Para solucionarlo, utiliza la siguiente
http://librosweb.es/tutorial/trucos­y­ejemplos­de­configuracion­del­archivo­htaccess­de­apache/ 7/8
16/6/2016 Trucos y ejemplos de configuración del archivo htaccess de Apache

configuración:

<IfModule mod_headers.c> 
    <FilesMatch "\.(eot|otf|ttc|ttf|woff)$"> 
        Header set Access‐Control‐Allow‐Origin "*" 
    </FilesMatch> 
</IfModule>

Forzar el uso de la codificación UTF­8

# Servir contenidos de tipo text/plain o text/html usando la codificación UTF‐8 
AddDefaultCharset utf‐8 
  
# Forzar la codificación UTF‐8 en varios tipos de archivos 
AddCharset utf‐8 .atom .css .js .json .rss .vtt .xml

http://librosweb.es/tutorial/trucos­y­ejemplos­de­configuracion­del­archivo­htaccess­de­apache/ 8/8

También podría gustarte