1.- ¿Qué es un .htaccess?

El .htaccess (acceso de hiper-texto) es el nombre por defecto del archivo de configuración de directorios de Apache. Se utiliza para personalizar la configuración de directivas y parámetros definidos en el archivo de configuración principal del alojamiento.

 

2.- ¿Cómo creamos y dónde colocamos un fichero .htaccess?

Para crear un fichero .htaccess, abrimos el bloc de notas e introducimos el código necesario. Guardamos el fichero como fichero de texto (.txt), por ejemplo "fichero_htaccess.txt", y lo subimos por FTP en la carpeta donde tiene que utilizarse. Una vez en el servidor, modificamos el nombre del fichero "fichero_htaccess.txt" por el de ".htaccess".

Importante: si ya disponemos de un fichero .htaccess dentro de nuestro alojamiento, podemos utilizarlo para realizar estas configuraciones.

El .htaccess debe colocarse en el interior de la carpeta donde queremos que tenga efecto. Por ejemplo, si queremos proteger con contraseña una carpeta llamada "privado", colocaremos el .htaccess dentro de la carpeta "privado".

El fichero .htaccess tiene una gran variedad de usos y utilidades que nos pueden resultar útiles en nuestra web. En el siguiente tutorial mostramos algunas de las funciones más utilizadas.

 

3.- Utilidades comunes  del .htaccess

El .htaccess tiene un gran número de utilidades. En este tutorial le mostramos algunas de las utilidades más comunes y cómo las debemos configurar:

 

Redirigir subdominio a subcarpeta

Redirigir web mediante redirecciones 301, 302

Redirigir web a subcarpeta

Control de acceso al sitio

Control de acceso a carpetas

Listado de carpetas

Redirigir peticiones con www.example.org a example.org y al contrario

Redirigir web amigable con SEO

Redireccionar el tráfico web

Redireccionar a conexión segura HTTPS

Redireccionar usuarios para usar HTTPS para una carpeta en particular

Evitar el hotlinking

Cambiar la pagina por defecto

Forzar el cacheo de nuestro sitio

Mejorar la compatibilidad de los caracteres

Crear URL amigables

 

Redirigir subdominio a subcarpeta

En algunas situaciones podemos necesitar crear una redirección a la carpeta de un subdominio desde .htaccess. Si queremos que al indicar el subdominio "test.example.org", por ejemplo, nos lleve a la carpeta "ejemplo.org/test" debemos indicar las siguientes directivas en el fichero .htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^test.example.com$
RewriteCond %{REQUEST_URI} !^/test/
RewriteRule (.*) /test/$1

La primera línea activa el motor de redirecciones y, solamente es necesario indicarla, si no se ha hecho antes.

La tercera y cuarta, realizan la redirección.

Y, la segunda, impide que la redirección se haga de nuevo, en caso de estar ya en la carpeta "test". Esto es necesario para evitar errores y bucles, ya que el fichero .htaccess vuelve a ejecutarse al redirigir la petición a la carpeta "test".

 

Redirigir web mediante redirecciones 301, 302

Si al acceder a la web, queremos redirigir la página a otra:

RewriteEngine On
RewriteRule ^(.*)$ http://www.webaredirigir.com/$1 [R=301,L]  (En "R=301", podemos poner el método de redirección que deseamos '301, 302..')

 

Redirigir web a subcarpeta

Si tenemos la web en una subcarpeta diferente de la carpeta "web", podemos redirigir todas las consultas a esta subcarpeta:

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

Donde:
example.org\.org sería, por ejemplo, cdmon\.com.com

La carpeta sería, por ejemplo, "wordpress".

 

Control de acceso al sitio

Podemos hacer que, si por alguna razón deseamos denegar el acceso a todos los usuarios o sólo permitir a un cierto grupo de direcciones IP, tengan acceso a nuestro sitio.

- Para permitir el acceso a nuestro sitio solo a ciertas IPs:

 ErrorDocument 403 http://www.example.org

Order deny,allow
Deny from all
Allow from 124.34.48.165
Allow from 102.54.68.123

Las IPs 124.34.48.165 y 102.54.68.123 son las IPs que tendrán acceso a la web.

 - Denegar el acceso al sitio solo a ciertas IPs:

 Allow from all
Deny from 145.186.14.122
Deny from 124.15

La IP 145.186.14.122 y la red 124.15.x.x no tendrán acceso a la web.

 

Control de acceso a carpetas

Un uso muy común del .htaccess es impedir el acceso a algunas carpetas. Puede que queramos deshabilitar totalmente el acceso a una carpeta, por ejemplo, una carpeta con librerías de programación que se incluyen en los archivos principales. En este caso, sólo los archivos principales accederán a ellos mediante el sistema de archivos, pero no se podrán acceder vía web.  Simplemente creamos un archivo .htaccess en esa carpeta que contenga el siguiente codigo si deseamos:

- Prohibir o deshabilitar por completo el acceso a una carpeta:

 #deny all access
deny from all

 - Permitir el acceso desde una IP específica:

 #deny all access
deny from all
allow from 212.267.98.14

- Permitir el acceso a un rango específico de IPs (forzado mediante la máscara de red):

 allow from 192.168.0.0/24

- Bloquear el acceso a un archivo específico:

 
Order allow,deny
Deny from all

 

Listado de carpetas

También podemos utilizar el .htaccess para mostrar el contenido de una carpeta en la estructura de directorios.

 Options +Indexes

 - Listado de carpetas, pero no queremos que se nos muestren los iconos por defecto:

 Options +Indexes
IndexOptions -FancyIndexing

 - También podríamos querer evitar el listado de carpetas:

 IndexIgnore*

 

Redirigir peticiones con www.example.org a example.org y al contrario

Si queremos que nuestra web se vea siempre sin www, añadimos el siguiente código en el .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(robots\.txt|favicon\.ico|sitemap\.xml)$
RewriteCond %{HTTP_HOST} !^example\.org$ [NC]
RewriteRule ^(.*)$ http://example.org/$1 [R=301,L]

Al revés, que la web se vea siempre con www:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(robots\.txt|favicon\.ico|sitemap\.xml)$
RewriteCond %{HTTP_HOST} !^www\.example\.org$ [NC]
RewriteRule ^(.*)$ http://www.example.org/$1 [R=301,L]

Donde:

example.org podría ser, por ejemplo, cdmon.com

 

Redirigir web amigable con SEO

Si hemos transferido nombres de dominio o deseamos redireccionar a una página específica sin que afecte a los resultados de los motores de búsqueda como Google, utilizaremos el siguiente código:

Redirect 301 /d/nombredelarchivo.html http://www.example.org

 

Redireccionar el tráfico web

Si lo que deseamos es que, si alguien intenta acceder a un archivo en concreto le redirija a otro fichero, podemos utilizar la directiva "redirect":

Redirect /fichero.php http://example.org/otros/nuevofichero.php

 

Redireccionar a conexión segura HTTPS

Si deseamos redireccionar todo nuestro sitio a una conexión segura (HTTPS), esto es muy útil si, por ejemplo, disponemos de un certificado SSL y queremos trabajar con él.

RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

 

Redireccionar usuarios para usar HTTPS para una carpeta en particular

Si lo que deseamos es sólo redireccionar a una conexión segura (HTTPS) una carpeta en particular en vez de todo el sitio, por ejemplo, tenemos una tienda en una carpeta aparte de nuestro sitio, hay que usar el siguiente código:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} nombre_de_la_carpeta
RewriteRule ^(.*)$ https://www.example.org/$1 [R,L]

 

Evitar el hotlinking

El hotlinking consiste en realizar un enlace directo a ficheros, generalmente imágenes y vídeos, que pertenecen a otra web. Esta práctica consume la transferencia del sitio original de la imagen. Para evitar que nos "roben" ancho de banda podemos configurar el .htaccess para impedir el hotlinking.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.org/.*$ [NC]
RewriteRule .*\.(jpe?g|gif|bmp|png)$ [L]

La ultima linea sirve para indicar qué tipo de contenido no deseamos (se escoge en función de las extensiones de los archivos) que nos cojan:

RewriteRule .*\.(jpe?g|gif|bmp|png)$ [L]

O bien, esta otra regla que, además muestra un archivo ("no_robar_ancho_de_banda.gif" que debemos haber creado previamente) para advertir que esta imagen está siendo cogida de nuestra web.

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/IMG/no_robar_ancho_de_banda.gif$
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.org/.*$ [NC]
RewriteRule .*(gif|jpe?g|png|bmp)$ http://example.org/IMG/no_robar_ancho_de_banda.gif [NC,R,L]

En la última línea ponemos las extensiones de los ficheros que queremos impedir que los enlacen e indicar la imagen de advertencia que queramos.

 

Cambiar la pagina por defecto

Podemos hacer que la página índice de nuestro sitio a mostrar no sea la archiconocida "index". Aquí establecemos "about.html" como página de inicio:

#Serve Alternate Default Index Page
DirectoryIndex about.html

  

Forzar el cacheo de nuestro sitio

El siguiente código no va a incrementar directamente la velocidad de carga del sitio en general, pero sí va a cargar más rápido cuando el mismo usuario vuelva a visitarlo, al enviar un status 304 cuando se pidan elementos que no han sido modificados. Podemos cambiar la frecuencia de cacheo al cambiar el número de segundos (en este ejemplo se da una vez al día):

FileETag MTime Size
ExpiresActive on
ExpiresDefault "access plus 86400 seconds"

 

Mejorar la compatibilidad de los caracteres

Esta opción es para aquellos que no utilizan un juego de caracteres estándar reconocido por el servidor, con esta medida evitamos mostrar el famoso error 500.

AddDefaultCharset utf-8

 

Crear URL amigables

Una URL amigable consiste en disfrazar una URL llena de parámetros para que quede más elegante y para ayudar también a tener una mejor posición de la página en los buscadores. Según como esté programada la web, el tipo de código que tendremos que poner será uno u otro.

 

Ejemplo 1:

Por ejemplo, "carpeta/fichero.php?id=120&idioma=es" es una URL no amigable, por lo que la transformaremos en "carpeta/fichero/120/es" que es más elegante y ayuda al posicionamiento en los buscadores. Es una URL amigable. Con el fichero .htaccess podemos realizar este "disfraz" para la URL.

Tenemos una carpeta en nuestra web que tiene un fichero al que se le pasan parámetros.

example.org/carpeta/fichero.php?id=25

Entonces, dentro de esta carpeta crearemos un .htaccess con el siguiente código:

Options +FollowSymLinks
RewriteEngine on
RewriteRule carpeta/(.*)/(.*).php$ /carpeta/fichero.php?id=$1

En la última línea es donde realizaremos el cambio.

(.*) será el parámetro que le pasaremos, $1.

(.*).php$ será el nombre del fichero para "decorar" la URL.

Una vez creado el .htaccess, en el enlace de nuestra web pondremos:

Enlace al fichero 25

Por lo tanto, "carpeta/25/nombre-del-fichero.php" será lo mismo que "/carpeta/fichero.php?id=25".

 

Ejemplo 2:

Si nuestra web utiliza URL como la siguiente "http://www.example.org/index.php?parametro=blog", podemos convertirlo a "http://www.example.org/blog".


Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ /index.php?parametro=$1 [QSA,L]


Ejemplo 3:

Otro ejemplo de conversión a URL amigables.

Convertimos URL "http://www.example.org/index.php?parametro=blog&paginador=12345" a "http://www.example.org/blog/pagina-12345".

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)/pagina-([0-9]+)$ /index.php?parametro=$1&paginador=$1 [QSA,L]


Ejemplo 4:

Código que utiliza el WordPress para realizar URL amigables.

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

 

Para más información, podéis contactar con nosotros.