Redirigiendo los estaticos de WordPress

Esta semana tuve la oportunidad de ir a un evento de WPO en el que le daban un buen repaso a como mejorar el rendimiento a un blog con WordPress, por lo que decidí ponerle las pilas a mio y mejorarlo un poco.

Uno de los temas de los que se hablo, fue el de separar los estáticos (o uploads) del dominio principal para que los navegadores carguen en paralelo el contenido y las imágenes, y así reducir el tiempo de carga de las paginas.

En mi caso personal, quería mantener el mismo directorio que configura WordPress por defecto, ya que mi servidor no es nada del otro mundo y ya me parece correcto el sistema que tiene para organizar los estáticos.

Entonces lo único que hay que hacer es modificar la configuración del virtualhost añadiendo otro virtualhost que apunte al directorio donde WordPress guarda los estáticos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<VirtualHost *:80>
    RewriteEngine On
    RewriteOptions Inherit
    DocumentRoot /web/httpd/wp-content/uploads
    ServerName w1.estatico.net
    FileETag All
    <Directory "/web/httpd/wp-content/uploads">
        Allow from all
        Options +Indexes FollowSymLinks
        AllowOverride All
    </Directory>
    <IfModule mod_expires.c>
        ExpiresActive on
        ExpiresDefault "access plus 1 month"
    </IfModule>
    <IfModule mod_headers.c>
        RequestHeader unset Cookie
        Header unset Set-Cookie
    </IfModule>
    <IfModule mod_deflate.c>
        DeflateCompressionLevel 9
        <FilesMatch "\.(js|css|php)$">
            SetOutputFilter DEFLATE
            BrowserMatch ^Mozilla/4 gzip-only-text/html
            BrowserMatch ^Mozilla/4\.0[678] no-gzip
            BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
        </FilesMatch>
    </IfModule>
</VirtualHost>

Pero entonces es cuando llega Google y nos dice que tenemos dos urls distintas con el mismo contenido:

  • http://web.com/wp-content/uploads/año/mes/imagen
  • http://w1.estatico.net/año/mes/imagen

Si es una web nueva y google todavía no ha enlazado ninguna imagen con la url de la web, podríamos dejarlo así aunque nos arriesgaríamos a que alguien (con malas intenciones) empezara a enlazar imágenes con la url de la web y fastidiarnos la vida.

En mi caso no lo podía dejar así ya que tenia imágenes en posts antiguos enlazadas a la url antigua por lo que tenia que redirigirlo de alguna manera.

Después de mucho buscar y probar, descubrí como hacerlo. Hay que añadir una directiva de redirección en la configuración del virtual host de nuestro blog justo después de donde definimos el directorio. Y digo de hacerlo en el virtual host porque lo probé de hacerla en el .htaccess (que seria lo lógico) pero no conseguí hacerlo funcionar (si alguien lo ha conseguido, que me diga como lo ha hecho y se lo agradeceré enormemente).

1
2
3
4
5
6
7
8
9
<VirtualHost *:80>
    ServerName web.com
    ...
    <Directory "/web/httpd">
        ...
    </Directory>
    RedirectMatch 301 ^/wp-content/uploads/(.*)$ http://w1.estatico.net/$1
    ...
</VirtualHost>

Y con esto ya tendremos solucionado el problema de urls distintas con la misma imagen. Ahora solo quedara configurar en WordPress el nuevo dominio para los estáticos y cambiar todas las imágenes que tengamos en los posts y paginas manualmente. Esto sera sencillo si no tenemos muchos pero en el caso de tener muchos posts sera tarea de chinos.

Estoy trabajando en un plugin para hacerlo automáticamente pero si conocéis de algún plugin que lo haga, avisar, ya que yo no he encontrado ninguno.

2 pensamientos en “Redirigiendo los estaticos de WordPress

  1. Ramon

    Me he perdido.
    Estoy con un servidor Amazon EC2 + Apache+ myqsl + wordpress + W3 Total Cache + Amazon CDN.
    Ahora estaba mirando como optimizarla más y con esto que has puesto me he perdido.
    Creo que me he perdido desde el principio.

  2. Ruben Autor

    Bueno, creo que mi redacción no es mi fuerte. Pido disculpas y espero ir mejorando poco a poco con este blog.
    De todos modos, por lo que comentas, esto que explico lo tendrías que aplicar en la configuración del servidor Apache de tu aplicación web.
    Si te puedo ayudar en algo más no dudes en preguntar 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *