Megaguía del archivo .htaccess en WordPress

Megaguía del archivo .htaccess en WordPress

Hoy quiero hablarte del archivo .htaccess en WordPress. Hay muchísimos artículos en la red sobre este fichero y voy a intentar agrupar y reunir lo que realmente es interesante sobre este tema en esta Megaguía que usamos en nuestra agencia de diseño web, donde resolveremos dudas del tipo:

¿Qué es un .htaccess? ¿Cuáles son las utilidades comunes de este fichero? ¿Hay trucos para mejorar el rendimiento y la seguridad de mi web?

¿Qué es el archivo .htaccess?

Es un fichero de configuración del servidor web Apache

Con el archivo .htaccess es posible configurar para tu web algunas directivas (o formas de distintas formas de actuar) de las que dispone el servidor web.

Es un archivo oculto, por eso comienza con un  ‘.’ delante.

El archivo .htaccess permite ajustes personalizados para cada sitio, haciendo uso de unas directivas de configuración del sistema.

Nunca se debe dar permisos de escritura para el archivo .htaccess, lo más habitual es conceder permisos 644, lo que permite acceso de lectura y permiso de escritura solamente al usuario del sistema.

Ten en cuenta que si das acceso con el archivo .htaccess no sólo estarás dando acceso a los subdirectorios donde esté situado, si no que el directorio principal también puede verse afectado.

Por lo tanto si no quieres que afecte a todo tu sitio web, en lugar de añadir el archivo .htaccess a la carpeta raíz de tu página, puedes añadirlo a un subdirectorio o directorio concreto, para que sus accesos de lectura sólo se apliquen en ese sitio.

 

Advertencia sobre .htaccess

El uso de este archivo puede ser peligroso si no se usa bien.  Se puede provocar una caída de la web en el servidor.  Es importante tener siempre una copia de tu sitio web, por si ocurre algún incidente.

Incluyendo también los ficheros .htaccess al ser editados.

htaccess-stamina-marketing-malaga-diseño-web

Expresiones regulares (regex) en .htaccess

Con el símbolo # se le indica al servidor que ignore la línea,por tanto no se ejecuta. Ejemplo:

# esto es un comentario

[F] Forbidden (prohibido): Le indica al servidor que devuelva un 403 Forbidden.

[L] Last rule (última regla): Le indica al servidor que pare de realizar mod rewrite una vez se haya porcesado la directiva anterior.

[N] Next (siguiente): Con él, Apache vuelve a ejecutar el rewrite hasta que todas las directivas de rewrite se hayan ejecutado correctamente.

[G] Gone (ido): Le indica al servidor que muestre el mensaje Gone (no longer exists).

[P] Proxy: Le indica al servidor que gestione las peticiones realizadas mediante mod_proxy

[C] Chain (cadena): Le indica al servidor que concatene la regla actual con la anterior.

[R] Redirect (redirigir): le dice a Apache que ejecute una redirección, forzando al navegador a que muestre la URL re-escrita/editada.

[PT] Pass Through (pasar a través): mod_rewrite pasa la URL edtada  a Apache para que la procese otra vez.

[OR] Or (o): operador logico “O”,une dos expresiones para que si una u otra se cumple, aplicar la regla asociada a la misma.

[NS] No Subrequest (sin petición subyacente): Le indica al servidor que se salte la directiva en el caso de que existan directivas internas subyacentes.

 

Códigos de redirección de cabecera

Directivas básicas de .htaccess

Activar el rewrite básico

Hay algunos hostings que no tienen el  “mod_rewrite” activado por defecto.

Para activarlo se añade la siguiente línea en el archivo .htaccess:

# activar rewrite básico

RewriteEngine on

 

Activar enlaces simbólicos

Ten en cuenta que deben estar activos los privilegios AllowOverride Options en el archivo de configuración del servidor para que funcione la directiva FollowSymLinks, por lo tanto recuerda activar los enlaces symlinks en el archivo .htaccess: 

# activar enlaces simbólicos

Options +FollowSymLinks

 

Activar AllowOverride

Si quieres que directivas asociadas a  AllowOverride, como FollowSymLinks funcionen adecuadamente, se deben añadir las siguientes directivas al archivo de configuración del servidor.

Muy importante activar AllowOverride sólo en el directorio concreto en que queramos que actué.

# activa privilegios de allowoverride

<Directory /www/public/assets/js/template>

AllowOverride Options

</Directory>

 

diseño-web-malaga-htaccess-

 

.htaccess permite mejorar el rendimiento de tu sitio web

Vamos a ver como mejorar el rendimiento de nuestra web haciendo uso de .htaccess

 

AllowOverride

Si se activa AllowOverride en todo la web, el server tiene que revisar cada directorio, localizando archivos .htaccess que puede que no existan.

Para que no ocurra esto se debe desactivar AllowOverride en el fichero .htaccess de la carpeta raíz del sitio y tan solo activarlo en aquellos  directorios donde sea necesaria desde el archivo de configuración del servidor.

En caso de no disponer de acceso a este archivo de configuración y de necesitar privilegios de AllowOverride no se debe hacer uso de esta directiva:

# mejorar rendimiento desactivando allow override

AllowOverride None

 

Indicando el Charset

Podemos definir el Charset por defecto antes de cargarlos.

# indicamos el Charset por defecto

AddDefaultCharset utf-8

 

Ahorrar ancho de banda

Se puede aumentar el rendimiento en servidores con PHP (por ejemplo son de los que hace uso WordPress):

# ahorrar ancho de banda para PHP

<ifmodule mod_php4.c>

php_value zlib.output_compression 10475

</ifmodule>

 

Establecer zona horaria del server

# establecer zona horaria del server

SetEnv TZ Spain/Madrid

 

Dirección de email del administrador del hosting

# dirección email administrador del servidor

SetEnv SERVER_ADMIN admin@miweb.com[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

 

Mejorar velocidad de transferencia al activar la caché de archivos

Indicamos el tiempo en segundos para editar la duración del contenido en caché:

<FilesMatch «.(flv|gif|jpg|jpeg|png|ico|swf)$»>

Header set Cache-Control «max-age=2592000»

</FilesMatch>

<FilesMatch «.(js|css|pdf|txt)$»>

Header set Cache-Control «max-age=604800»

</FilesMatch>

<FilesMatch «.(html|htm)$»>

Header set Cache-Control «max-age=43200»

</FilesMatch>

archivos

ExpiresActive On

ExpiresDefault A604800

ExpiresByType image/x-icon A2419200

ExpiresByType application/x-javascript A2419200

ExpiresByType text/css A2419200

ExpiresByType text/html A300

<FilesMatch «\.(pl|php|cgi|spl|scgi|fcgi)$»>

ExpiresActive Off

</FilesMatch>

 

Declarar tipos MIME específicos/adicionales

AddType application/x-shockwave-flash .swf

AddType video/x-flv .flv

AddType image/x-icon .ico

 

Editar el Charset y otras cabeceras sin meta tags

# AddType ‘text/html; charset=UTF-8’ html

AddDefaultCharset UTF-8

DefaultLanguage es-ES

 

Limitar métodos GET y PUT al hosting

Options -ExecCGI -Indexes -All

RewriteEngine on

RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|HEAD) RewriteRule .* – [F]

 

 

diseño-web-malaga-htaccess-programacion-malaga

 

Mejorar con .htaccess la seguridad en nuestra página web

Bloquear acceso a .htaccess

Añadiendo la siguiente directiva conseguimos que los intentos para acceder al fichero .htaccess devuelva un error 403. De todas formas, lo primero que debemos hacer como protección es editar los permisos a 644:

<Files .htaccess>

order allow,deny

deny from all

</Files>

Evitar acceso a archivos en concreto

# evitar el acceso de un archivo

<files prueba.txt>

order allow,deny

deny from all

</files>

 

Evita acceso a varios archivos

<FilesMatch «\.(htaccess|ini|phps|psd|sh)$»>

Order Allow,Deny

Deny from all

</FilesMatch

Evita la navegación de directorios no autorizada

Para que no se pueda navegar a través de un directorio desde el navegador,  se pueden utilizar estas directivas, las cuales devolverán un mensaje indicando “Prohibido – Se requiere autorización”

Options All -Indexes

Si deseamos permitirlo:

Options All +Indexes

Tambien podemos hacer uso de la directiva IndexIgnore para que no se muestren ciertos archivos:

IndexIgnore *.wmv *.mp4 *.avi *.etc

 

Modificar página inicio

Esta regla le indica al server que se debe cargar  “prueba.html” como index del directorio.

DirectoryIndex prueba.html

 

Forzar SSL

SSLOptions +StrictRequire

SSLRequireSSL

SSLRequire %{HTTP_HOST} eq «dominio.es»

ErrorDocument 403 https://dominio.es

# forzar SSL sn hacer uso mod_ssl

RewriteCond %{HTTPS} !=on [NC]

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

 

Realizar CHMOD de diferentes tipos de archivo

Podemos modificar los permisos mediante CHMOD, situaremos las reglas en nuestro .htaccess en la carpeta raíz para modificar todos los tipos de archivos que deseemos.

chmod js files 640

chmod .htaccess files 644

chmod php files 600

Ocultar las extensiones de los archivos

Podemos modificar las extensiones de los archivos para que se muestren como un tipo de archivos diferente, como por ejemplo, que todas las extensiones sean .php

ForceType application/x-httpd-php

Protección contra DDOS limitando el tamaño de subida de los archivos

Podemos limitar el tamaño de la subida de los archivos.

LimitRequestBody 10240000

 

diseño-web-malaga-htaccess-programacion-malaga

Usabilidad

Mostrar las páginas de error personalizadas

ErrorDocument 400 /logs/400.html

ErrorDocument 401 /logs/401.html

ErrorDocument 403 /logs/403.html

ErrorDocument 404 /logs/404.html

ErrorDocument 500 /logs/500.html

 

Mostrar un archivo para errores global

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^.*$ /logs/logs.php [L]

Forzar la descarga de los archivos multimedia para no cargarlos en el navegador

AddType application/file .avi

AddType application/file .mpg

AddType application/file .wmv

AddType application/file .mp3

 

Trucos de redirección

mod_rewrite

Debe estar activada la directiva RewriteEngine para que funcionen las redirecciones realizadas con mod_rewrite.

RewriteEngine on

 

Redirección de http://www.miweb.es a http://miweb.es

RewriteEngine on

Options +FollowSymLinks

RewriteCond %{HTTP_HOST} ^www\.miweb\.es$ [NC]

RewriteRule ^(.*)$ http://miweb.es/$1 [R=301,L]

 

Redirección de http://oldweb.es a http://newweb.es

RewriteEngine On

RewriteRule ^(.*)$ http://newweb.es/$1 [R=301,L]

Redirigir a otra URL en base a una cadena concreta

Por ejemplo, podemos redirigir a una categoría de nuestra web, cuando cualquier petición tenga en su contenido el carácter “prueba”.

RewriteRule ^prueba http://miweb.com/categoria/prueba/ [R]

 

Truco especial para WordPress

Formularios

En WordPress podemos verificar el dominio desde donde se esta llamando para ejecutar los formularios.

RewriteCond %{HTTP_REFERER} !^http://www.miweb.es/.*$ [NC]

RewriteCond %{REQUEST_POST} .*contact.php$

RewriteRule .* – [F]

Espero haber resuelto tus dudas sobre el archivo .htaccess en esta megaguía.

Si tienes otros trucos y directivas de htaccess que quieras compartir con nosotros, los espero en los comentarios 🙂

Valora este artículo:
5/5 - (1 voto)
Juanlu Pintor
Juanlu Pintor
Director de STAMINA Marketing Digital y profesor de Marketing y Dirección Comercial en la Universidad de Málaga.