Megaguía del archivo .htaccess en WordPress

Megaguía del archivo .htaccess en WordPress

28 agosto, 2018 0 Por Pedro C. Medina

Hola, soy Pedro de STAMINA Marketing y 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, 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.

Las directivas  de .htaccess afectan al directorio superior y a todos los subdirectorios donde esté el fichero.

Con lo cual,para aplicar sus directivas a toda una web se debe colocar el archivo .htaccess en la carpeta raíz de sitio.

Además, también se pueden crear archivos .htaccess dentro de un directorio o subdirectorio para que sus directivas se apliquen solo al mismo.

 

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 web, incluidos 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): Apache vuelve a ejecutar el rewrite hasta que todas las directivas de rewrite se hayan ejecutado.

[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

  • Código 301 – movido permanentemente
  • Código 302 – movido temporalmente
  • Código 403 – prohibido
  • Código 404 – no encontrado
  • Código 410 – ido

 

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

Para que funcione la directiva FollowSymLinks deben estar activos los privilegios AllowOverride Options en el archivo de configuración del servidor:

# activar enlaces simbólicos

Options +FollowSymLinks

 

Activar AllowOverride

Para que funcionen la directivas asociadas a  AllowOverride, como FollowSymLinks, se deben añadir la siguiente directivas al archivo de configuración del servidor.

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

# activa privilegios de allowoverride

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

AllowOverride Options

</Directory>

diseño-web-malaga-htaccess-Mejora el rendimiento de tu web con .htaccess

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 solo en los directorios donde sea necesaria desde el archivo de configuración del servidor. Si no se dispone de  acceso a este archivo de configuración y se necesitan 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 [email protected][/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]

 

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

¡Comparte y ayuda!