El archivo .htaccess se utiliza para definir el comportamiento del servidor de nuestra página o definir funciones en el mismo. ¿para qué puedo utilizar .htaccess? Su uso es extenso, pero algunos usos frecuentes son: restringir accesos a directorios, bloquear bots, arañas web o IPs. redireccionar un directorio, forzar el protocolo https, etc.
Cada función son unas pocas líneas de código, que indica al servidor lo que tiene que hacer. Puedes añadir o cambiar la funcionalidad añadiendo o cambiando el código de este archivo.
Nosotros lo utilizamos en los casos siguientes:
Compresión y optimización de archivos
Comprimir con GZIP
<ifModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_item_include file .(html?|txt|css|js|php|pl)$ mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text/.* mod_gzip_item_include mime ^application/x-javascript.* mod_gzip_item_exclude mime ^image/.* mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* </ifModule>
Comprimir con DEFLATE
<IfModule mod_deflate.c> # Compress HTML, CSS, JavaScript, Text, XML and fonts AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE font/opentype AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml
Habilitar keep-alive
<ifModule mod_headers.c> Header set Connection keep-alive </ifModule>
Añadir «Expires headers»
Indica al navegador si debe solicitar un archivo específico del servidor o si debe tomarlo desde la caché del navegador.
<IfModule mod_expires.c> # Enable expirations ExpiresActive On # Default directive ExpiresDefault "access plus 1 month" # My favicon ExpiresByType image/x-icon "access plus 1 year" # Images ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" # CSS ExpiresByType text/css "access plus 1 month" # Javascript ExpiresByType application/javascript "access plus 1 year" </IfModule>
Usar reglas .htacces para redirecciones
Redirección de una url
Es la redirección más sencilla. Se aplica, por ejemplo, si cambiamos la url de una entrada:
redirect 301 /slug-antiguo/ https://www.midominio.com/nuevo-slug/
Redirección de una url con espacios o «%20»
A veces, las urls incluyen espacios, que se representan en el navegador como «%20». Si aplicamos una redirección como en el caso anterior no se llevará a cabo. Es necesario indicar que hay un espacio.
Si la url es, por ejemplo, https://www.midominio.com/antiguo%20slug/, debemos indicarlo con comillas simples:
redirect 301 '/antiguo%20slug/' https://www.midominio.com/nuevo-slug/
Redirección de todo el dominio
Si cambiamos de dominio, podemos hacer la redirección de la siguiente manera:
<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>
Redirigir un dominio sin www al dominio con www
RewriteEngine On RewriteCond %{HTTP_HOST} ^midominoio.com [NC] RewriteRule ^(.*)$ http://www.midominoio.com/$1 [L,R=301]
Cambio de una categoría de wordpress
Si cambiamos el nombre de una categoría, podemos crear la redirección de la antigua a la nueva de la siguiente manera:
RewriteRule ^categoriaantigua/(.+)$ https://www.nuestrodominio.com/categorianueva/$1 [R=301,L]
Incluir un subdirectorio en tags
Por ejemplo, incluir las tags bajo el directorio blog.
RewriteCond %{THE_REQUEST} ^GET\ /tag RewriteRule ^tag(.*) /blog/tag$1 [L,R=301]
Forzar protocolo seguro https
RewriteEngine On RewriteCond %{ENV:HTTPS} !on [NC] RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.nuestrodominio.com/$1 [R=301,L,NE]
Forzar barra inclinada al final
RewriteEngine on RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
Nota: Cuidado, en algunas instalaciones, esta regla nos ha dado problemas con el plugin de Contact Form 7. Concretamente con al url interna (wp-json/….). En este caso hay que incluir una excepción en la regla:
# tk_ Añadir barra inclinada al final de url RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(.)/$ RewriteCond %{REQUEST_URI} !^/wp-json RewriteCond %{REQUEST_FILENAME} !.(gif|jpg|png|jpeg|css|js|xml)$ [NC] RewriteRule ^(.)$ https://%{HTTP_HOST}/$1/ [L,R=301] # Fin de tk_ Añadir barra inclinada al final de url
Seguridad
Proteger el archivo .htaccess
<Files .htaccess> Order allow,deny Deny from all </Files>