Tiempo de lectura 10 minutos
¿Qué podemos hacer con htaccess en nuestro sitio web?
La mayoría de las ofertas para hosting web son para el servidor web Apache, una solución mucho más económica que otras plataformas, Apache nos permite entre otras muchas cosas usar el archivo .htaccess, con el que podemos controlar muchas cosas de nuestro sitio web.
Podemos redirigir un dominio a otro, podemos redirigir un dominio sin www al dominio con www, si escribes en el navegador http://creotupagina.es siempre te redirigirá a https://www.creotupagina.es. Si escribes en el navegador: https://www.creotupagina.com, https://creotupagina.com, da igual lo que pongas que siempre redirigirá a la web donde te encuentras ahora.
Por si no lo sabías para Google estos dos dominios con y sin www son diferentes. Te dejamos esta guía de códigos .htaccess para que los puedas utilizar en tu página web.
Contenido del artículo
- ¿Qué es el archivo .htaccess?
- Redirigir la URL sin www a la dirección con www
- Redirigir siempre al alias www cualquier dominio apuntado
- Redirigir url de una carpeta a otra carpeta del mismo dominio
- Impedir listar el directorio
- Orden de ejecución de archivos
- Comprimir archivos CSS, JavaScript, XML y texto
- Almacenamiento en caché de imágenes
- Proteger el archivo .htaccess
- Prevenir el hotlinking
- Cambiar la carpeta de destino de un dominio a otra carpeta
- Forzar el uso de SSL
- Redireccionar de HTTP a HTTPS
- Redireccionar de HTTPS a HTTP
- Forzar la carga de contenido mixto bajo HTTPS en lugar de HTTP
1. ¿Qué es el archivo htaccess?
(Hypertext Access o Acceso a Hipertexto). Es un archivo de configuración de las políticas de acceso a los directorios y archivos de la web, para realizar configuraciones como redireccionar dominios, apuntar un dominio a otra carpeta, proteger directorios, comprimir archivos, etc.
Es archivo muy sencillo que se puede modificar con un editor de téxto básico, subirlo a la raíz de tu webpara que haga lo que queramos que haga.
Cualquier error en el archivo htaccess puede provocar errores en el funcionamiento de la web.
Podrás encontrar el archivo en la raiz de tu servidor, es un archivo oculto por lo que no lo podrás ver hasta que en opciones de configuración, pinches en ver archivos ocultos.
2. Redirigir la URL sin www a la dirección con www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^creotupagina.es [NC]
RewriteRule ^(.*)$ https://www.creotupagina.es/$1 [L,R=301]
Este código redirigrá la url de tu dominio sin www a tu dominio con www.
3. Redirigir siempre al alias www cualquier dominio apuntado
Útil para redirigir uno o varios dominios con www usando comodines www.*.*:
RewriteCond %{REQUEST_URI} !^/robots.txt$ [NC]
RewriteCond %{HTTP_HOST} !^www.[a-z-]+.[a-z]{2,6} [NC]
RewriteCond %{HTTP_HOST} ([a-z-]+.[a-z]{2,6})$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]
Si tenemos varios dominios, si no queremos hacer una redirección 301 de cada uno, podemos redirigir todos los .tldde los dominios utilizados, sin www a con www:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
4. Redirigir url de una carpeta a otra carpeta del mismo dominio
Si hemos cometido el error de poner una carpeta de forma incorrecta, o que se cambió el nombre, podemos redireccionar las peticiones que vayan de la carpeta 1 a la carpeta 2:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^carpeta1/(.*)$ http://dominio.com/carpeta2/$1 [R=301,L]
4.1. Redirigir un dominio a otro dominio
Para que quienes vengan de enlaces de la antigua url lleguen a la nueva sin problema. Si no se hace podría afectar al posicionamiento y perderíamos tráfico.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^anteriordominio.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.anteriordominio.com$
RewriteRule (.*)$ http://www.nuevodominio.com/$1 [R=301,L]
</IfModule>
5. Impedir listar el directorio
Si tienes una carpeta con contenido privado, si dicha carpeta no tiene un index.html los visitantes podrían ver todos los archivos dentro sin problemas, con esto vamos a evitarlo.
Options -Indexes
6. Orden de ejecución de archivos
Interesante si quieres dar prioridad a un archivo frente a otro, por ejemplo si tienes tanto el index.html como un index.php dentro de public_html, el archivo index.html tiene prioridad, la mayoría de scripts ejecutan primero el .php, también podemos eliminar el html aunque si no es así, la mejor solución es utilizar el siguiente código para dar prioridad al index.php:
DirectoryIndex index.php index.html
7. Comprimir archivos CSS, JavaScript, XML y texto
(Hypertext Access o Acceso a Hipertexto). Es un archivo de configuración de las políticas de acceso a los directorios y archivos de la web, y para realizar configuraciones como redireccionar dominios, proteger, comprimir archivos, etc.
<ifmodule>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
</ifmodule>
8. Almacenamiento en caché de imágenes
(Hypertext Access o Acceso a Hipertexto). Es un archivo de configuración de las políticas de acceso a los directorios y archivos de la web, y para realizar configuraciones como redireccionar dominios, proteger, comprimir archivos, etc.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/gif A432000
ExpiresByType image/jpg A432000
ExpiresByType image/jpeg A432000
ExpiresByType image/png A432000
ExpiresByType image/ico A432000
ExpiresByType image/bmp A432000
ExpiresByType text/css A432000
ExpiresByType text/javascript A432000
ExpiresByType application/javascript A432000
ExpiresByType application/x-javascript A432000
</IfModule>
Guarda caché de los archivos durante cinco días o 432.000 segundos. Se puede cambiar este valor pero tiene que ser expresado en segundos.
9. Proteger el archivo .htaccess
Para evitar que el archivo htacces pueda ser leído desde un navegador web.
<Files .htaccess>
Order allow,deny
Deny from all
</Files>
10. Prevenir el hotlinking
El hotlinking es una mala práctia, pero a veces otros hostmasters pueden cargar nuestras imágenes, a través de nuestro servidor haciéndolas suyas, y si tienen muchas visitas afectará mucho al ancho de banda de nuestro servidor.
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+.)?creotupagina.es/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*.(jpg|gif|bmp|png)$ http://hotlink.creotupagina.es/no_se_permite_hotlinking.jpg [L]
11. Cambiar la carpeta de destino de un dominio a otra carpeta
Esto nos vale por ejemplo, si tenemos ya un sitio web dentro de public_html, y queremos actualizarlo, pero si no quieres que nadie lo vea y tampoco quieres que la web en producción se vea afectada, puedes trabajar con una web nueva dentro de una subcarpeta, al terminarla puedes optar por mover todos los archivos al directorio raiz o redirigir el dominio a la carpeta por medio del archivo htaccess.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^creotupagina.es$ [OR]
RewriteCond %{HTTP_HOST} ^www.creotupagina.es$
RewriteCond %{REQUEST_URI} !^/pagina2/
RewriteRule (.*) /pagina2/$1 [L]
12. Forzar el uso de SSL
Este código obliga a usar SSL, denegando las peticiones http.
SSLOptions + StrictRequire SSLRequireSSL
13. Redireccionar de HTTP a HTTPS
Es necesario tener un certificado SSL instalado en el hosting para poder trabajar con este protocolo más seguro.
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteCond %{HTTP_HOST} ^creotupagina.es$ [OR]
RewriteCond %{HTTP_HOST} ^www.creotupagina.es$
RewriteRule ^(.*)$ https://www.creotupagina.es/$1 [R=301,L,NE]
Si no queremos forzar el uso de SSL para una url determinada, por ejemplo https://www.creotupagina.es/direccion-sin-https
RewriteEngine On
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteCond %{REQUEST_URI} !/direccion-sin-https$ [NC]
RewriteCond %{HTTP_HOST} ^creotupagina.es$ [OR]
RewriteCond %{HTTP_HOST} ^www.creotupagina.es$
RewriteRule ^(.*)$ https://www.creotupagina.es/$1 [R=301,L,NE]
14. Redireccionar de HTTPS a HTTP
También podemos hacerlo al revés, forzar el uso el tráfico encriptado SSL para sevir con http.
RewriteEngine On
RewriteCond %{ENV:HTTPS} on [NC]
RewriteCond %{HTTP_HOST} ^creotupagina.es$ [OR]
RewriteCond %{HTTP_HOST} ^www.creotupagina.es$
RewriteRule ^(.*)$ http://www.creotupagina.es/$1 [R=301,L,NE]
15. Forzar la carga de contenido mixto bajo HTTPS en lugar de HTTP
Aun teniendo un certificado SSL para trabajar bajo https, por alguna razón estamos cargando contenido con http como contenido mixto, añadiendo esta directiva en el archivo htacces forzamos los contenidos no seguros a https.
<ifModule mod_headers.c>
Header always set Content-Security-Policy "upgrade-insecure-requests;"
</IfModule>
En este artículo apenas hemos visto un poco por encima todo el potencial que tiene el archivo htaccess, muchas veces pasa desapercibido como si fuera un archivo más, cuando en realidad su potencial es tan grande como el usuario quiera darle.