Cómo retornar un 410 en WordPress

In: wordpress

29 may 2012

wordpress error 150x150 Cómo retornar un 410 en WordPressBuscando por internet, he intentado encontrar una manera de devolver una cabecera 410 para algunas URLs en WordPress. Encontré 2 formas que no me han interesado:

  • Una es un plugin: 410 for WordPress. Estudiando este plugin, ví que no es la opción que más me interesaba, ya que su funcionamiento es el siguiente:
    En el panel de administración, crea una página de opciones donde se pueden ir añadiendo registros que devolverán 410. Esos registros consisten en expresiones regulares, y son almacenados en una nueva tabla creada por el plugin.
    Por cada petición que se hace a WordPress, carga todos los registros de esa tabla, y comprueba todas las expresiones regulares contra la URL que se esta solicitando, para descubrir si es un error 410.
    Considero que este coste es elevado para cada una de las peticiones, si solamente te interesa establecer los 410 a una pocas URLs que tienes bien definidas.
  • Otra opción, es establecerle a Apache la página de error 410 via el estamento ErrorDocument, y crear un archivo expresamente para ello.
    Todas las URLs que nos interese que devuelvan un 410, las determinamos vía .htaccess, con el flag G.
    Puede uno pensar en establecer que ese archivo sea el 404.php de nuestro theme, pero no funciona al no cargar correctamente todo el entorno de WordPress.

Así que he desarrollado un mix de las dos opciones anteriores. Combina los beneficios de establecer las reglas desde Apache, pero mostrando la misma página de error de WordPress como para un 404. Si se desea, se puede personalizar creando un template 410.php.

Primero, hay que modificar el ErrorDocument de Apache:

ErrorDocument 410 /index.php?error=410

En el functions.php del theme, añadir el siguiente código:

/**
* Reponse the header 410.
*
* @param string $template
* @return string
*/
function e12_response_410( $template ) {
    if( is_404() && '410' == $_SERVER['REDIRECT_STATUS'] ) {
        status_header( 410 );
 
        if( file_exists( STYLESHEETPATH . '/410.php' ) ) {
            return STYLESHEETPATH . '/410.php';
        }
    }
 
    return $template;
}
 
add_filter( 'template_include', 'e12_response_410' );

Y ahora, simplemente añadir las reglas a Apache para que retorne los 410:

RewriteRule ^url-eliminada$  - [G,L]

Si todo funciona bien, al solicitar esa URL, devolverá la misma página que un error 404, pero con la cabecera de un 410.

1 Comentario en Cómo retornar un 410 en WordPress

Eric Rasch

22 mayo 2014 a las 20:03

This worked perfectly!! Your functions.php was the missing piece I needed. Quick note: if you use the [G] flag, you don’t need to include the [L] flag (it’s implied with the G).

Formulario de Comentario

Página 1 de 11