944 063 154

Acciones comunes en .htaccess

El fichero .htacces permite realizar diferentes acciones como crear redirecciones 301, configurar una web por defecto en Linux o reglas para bloquear accesos y mejorar la seguridad de un sitio web.

 

Operaciones básicas

  • Limitar los ficheros de un directorio. Dependiendo de las necesidades es posible que en algunos formularios permitamos al usuario adjunte algún tipo de archivo, como documentos o imágenes. Para garantizar que se añaden los archivos correctos, podemos limitar las opciones a los formatos permitidos:
php_value engine off

AddType text/plain .htm .html .shtml
  • Mostrar el contenido en función del navegador del usuario. Si necesitamos redirigir el contenido según en navegador desde el que se realiza la solicitud podemos recurrir al User-Agent de la cabecera HTTP, la característica con la que se relaciona el navegador.

Con la siguiente regla en el fichero .htaccess al solicitarse el index.html se servirá la página index establecida para ese navegador. En caso de que no se haya indicado el navegador que está utilizando el usuario, se mostrará la página index.html estándar, siempre que así lo hayamos indicado en el .htaccess.

Ten en cuenta que en las expresiones regulares aceptan cualquier cadena de texto. Así, si solo indicas el nombre del navegador, y no sus posibles versiones, será compatible con cualquier de ellas.

RewriteCond %{HTTP_USER_AGENT} ^Navegador/*

RewriteRule ^index\.html$ index.navegador.html [L]

RewriteRule ^index\.html$ index.html [L]
  • Indicar el lenguaje por defecto del servidor. Si queremos indicar el idioma por defecto del servidor deberemos incluir en .htaccess lo siguiente:
# lenguaje por defecto del server

DefaultLanguage en-US
  • Declarar tipos específicos de MIME Types. Es posible que necesitemos indicarle al servidor qué tipo de aplicación o programa se relaciona con una extensión en concreto, es decir, que necesitemos definir los MIME Types. En este caso deberemos añadir:
# agregar mime types

AddType application/x-shockwave-flash .swf

AddType video/x-flv .flv

AddType image/x-icon .ico
  • Forzar un dominio a www. Si queremos que el usuario vea nuestro dominio con www. antes del nombre de dominio, podemos hacerlo con esta regla:
RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com [NC]

RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]
  • Forzar un dominio sin www. En caso contrario, si queremos que el usuario vea nuestro dominio sin www, deberemos hacer lo siguiente:
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]

RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
  • Forzar HTTPS en NGINX. Para forzar la navegación a través de HTTPS puedes indicar esta regla:
RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Proto} !https

RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R,L]

Reglas de seguridad

Si quieres mejorar la seguridad de tu sitio web, puedes utilizar las siguientes reglas de .htaccess:

  • Bloquear el acceso al fichero. Bloquear los accesos a .htaccess es muy sencillo y ayuda a que la web esté más segura.
<Files .htaccess>

order allow,deny

deny from all

</Files>
  • Impedir el acceso a un archivo concreto. También es posible bloquear el acceso a determinados archivos de la siguiente manera:
<files archivo-a-bloquear.jpg>

order allow,deny

deny from all

</files>
  • Bloquear el acceso a diferentes extensiones.  Al igual que en el ejemplo anterior era posible bloquear el acceso a un determinado archivo, también puede hacerse con diferentes extensiones:
<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">

Order Allow,Deny

Deny from all

</FilesMatch>
  • Cambiar la extensión de los archivos. Disfrazar las extensiones de los archivos es otra forma de mejorar la seguridad. Así, por ejemplo, puedes modificar los ficheros PHP a .foo, aunque seguirán reconociéndose como .php:
AddType application/x-httpd-php .foo
  • Proteger un directorio mediante el bloqueo de IPs o dominios. En caso de que no queramos recibir peticiones desde una determinada IP o dominio podemos bloquearlas, así evitaremos peticiones indebidas que pueden afectar al servidor. Con la siguiente regla bloqueamos las peticiones de la IP y el dominio de ejemplo:
<Limit GET POST PUT>

order allow,deny

allow from all

deny from 123.45.67.890

deny from .*dominio-ejemplo\.com.*

</Limit>
  • Permitir el acceso a un directorio a una IP o dominio concreto. Lo contrario al caso anterior, con esta regla solo podrán acceder a un recurso el dominio o la IP que se haya establecido:
<Limit GET POST PUT>

order deny,allow

deny from all

allow from 123.123.123.123

allow from .*dominio-ejemplo\.com.*

</Limit>
  • Bloquear las visitas de un dominio específico. Si recibes visitas de dominios sospechosos, como foros o webs de dudosa reputación, que pueden afectar al servidor, puedes bloquear las peticiones de esos dominios en concreto:
<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_REFERER} dominio1\.com [NC,OR]

RewriteCond %{HTTP_REFERER} dominio2\.com [NC,OR]

RewriteRule .* - [F]

</ifModule>
  • Autorizar o denegar accesos a una IP. Desde .htaccess es posible bloquear o autorizar el acceso a una determinada IP o rango de IPs. Para ello podemos:

Para autorizar el acceso a IPs o rangos de IPs:

Allow from 99.88.77.66

Allow from 99.88.77

Allow from 99.88

Allow from 99

Para denegar el acceso a IPs o rangos de IPs:

Deny from 99.88.77.66

Deny from 99.88.77

Deny from 99.88

Deny from 99
  • Bloquear bots. El uso de estos programas es muy común por parte de algunas aplicaciones y en algunos casos pueden tener malas intenciones, sobrecargando el servidor, robando información o llevando a cabo técnicas fraudulentas como phishing. Para evitarlo puedes bloquear este tipo de peticiones haciendo que esos Bots acaben en una dirección que realmente no existe:
RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} ^Bot1 [OR]

RewriteCond %{HTTP_USER_AGENT} ^Bot2

RewriteRule .* - [F]
  • Bloqueo de cabeceras específicas. Si necesitas bloquear un referer, una condición que contiene la URL desde la que llega el visitante, puedes impedir el acceso a ese tipo de páginas que pueden provocar problemas.
RewriteCond %{HTTP_REFERER} ^http://www.dominio-ejemplo.com$

RewriteRule !^http://[^/.]\.dominio\.com.* - [F,L]
  • Protección frente a DDoS. En los ataques de tipo DDoS es frecuente intentar subir algún archivo a la web para saturar el servidor. Con esta regla podremos limitar el tamaño de los ficheros que pueden subirse para minimizar el impacto de este tipo de ataque:
LimitRequestBody 10000000
  • Bloquear los ataques a WordPress. El login de WordPress es uno de los ataques más frecuentes para sobrecargar el servidor o hacerse con el control de la administración de WordPress. Puedes mejorar la seguridad de wp-login añadiendo lo siguiente en el fichero .htaccess:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} =POST
RewriteCond %{HTTP_REFERER} !^<a class=”moz-txt-link-freetext” href=”http://%28.*%29?.dominio.com”>http://(.*)?.dominio.com</a> [NC]
RewriteCond %{REQUEST_URI} ^/wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^/wp-admin$
RewriteRule ^(.*)$ – [R=403,L]
</IfModule>

Artículos relacionados