Jump to content

htaccess - Configurar directiva HTTP 410 GONE para dar de baja dominio o Carpeta


hivitro
 Share

Publicaciones recomendadas

Asi como dice el slogan de American Express "Pertenecer tiene sus privilegios"... pasar dias leyendo los manuales de Apache.. Tambien tiene sus privilegios cuando administramos una pagina o servidor y por supuesto, no todo funciona como queremos.

 

No hace una semana, me encargue de transladar en forma "nativa" (enlaces, usuarios, direcciones, comentarios, post, imagenes) mi vBulletin desde el dominio de postfields hacia nivelextremo, realizando algunas actualizaciones dentro de lo que php y mysql me permitian. Obviamente siempre hay que solventar incompatibilidades de codigo y plugins, y en este caso me encontre con que vBSEO, el Software que administraba las URL amigables de vBulletin, llego a su EOL (End of life, Caput!, cerro la empresa) y lamentablemente perdi compatibilidad con el sistema interno del foro, con lo cual decidi re-estructurar los enlaces pero me era imposible hacer una redireccion 301 de un sitio a otro, ya que las direcciones no eran coincidentes.

 

Mi primer pregunta fue, "Que hago con los 10 mil enlaces que tiene google" entonces trabajando sobre el archivo .htaccess comence a escribir directivas, una de las cuales fue muy simple, desde el viejo dominio enviar una orden 301 de TODO y capturar TODO lo que llegue al nuevo dominio, y derivarlo hacia /index.php

 

La idea funciono, cualquier viejo enlace, del viejo dominio, definido por vBSEO, ahora era recibido por mi nuevo dominio, mostrandolo en la barra del navegador, pero en realidad el usuario llegaba a la pagina de inicio. Efectivamente, enlazaba, pero enseguida te dabas cuenta que no es lo que buscabas.

 

Ahora, inmediatamente al registrar en Google el nuevo dominio, subir los SiteMaps, etc, me di cuenta que para Google, el viejo sitio estaba activo, y todos los enlaces eran persistentes ya que tenian un destino, entonces me contre con unos 10 enlaces del nuevo sitio, falsos, provenientes del viejo sitio que apuntaban a una informacion que no era correcta.. pero no en exactamente la misma url. Asi que me di cuenta de que no sirve tener 10 mil enlaces indexados que llevan a mi nueva pagina, pero no de la manera correcta.

 

Solicito a Google la baja de los enlaces de mi viejo dominio y google me indica que no es posible, ya que el sitio sigue activo y los enlaces tienen respuesta ya que mi .htaccess los recibe perfectamente.

 

Asi que fue ahi donde aparecio en escena el flag [G]one de Apache. Escribi en segundos el nuevo .htaccess y el resultado fue inmediato.

 

[b]Gone[/b]

The requested resource
/
is no longer available on this server and there is no forwarding address. Please remove all references to this resource.
[hr] Apache Server at www.postfields.com Port 80


 

 

De la misma manera, Google inmediatamente dio luz verde a la baja de los viejos enlaces bajo el concepto de Obsoletos.

 

 

[G] Gone | Error 410

 

GONE, es uno tantos flag que podemos pasar a RewriteRule para que luego de interpretada la regla, indique que el contenido ya no esta disponible. Que paso? no importa.. ya no esta...

 

Se puede aplicar detras de cualquier condicion/regla de htaccess con lo cual nos permite indicar que aun archivo, una carpeta, un enlace, o un directorio por ejemplo, ya no esta disponible, capturar el error, y mostrar incluso una pagina personalizada.

 

Por ejemplo:

 

Si quisieramos indicar que nuestro blog ya no esta mas dentro de nuestro sitio, podemos hacerlo de la siguiente manera

 


RewriteEngine On
RewriteBase /
RewriteRule ^blog/ - [G]

 

Si quisieramos indicar que todo un sitio no esta mas disponible

 


RewriteEngine On
RewriteBase /
# 410 - Gone en ejemplo.com
RewriteCond %{HTTP_HOST} (ejemplo.com$) [NC]
RewriteRule ^(.*)$ $1 [L,G]

 

Si quisieamos indicar una pagina que capture este error, 410

 


ErrorDocument 410 /path/error410.html

 

Tambien podemos usar la instruccion Redirect con la instruccion gone

 


Redirect gone /carpeta/archivo.html

 

Personalmente escribi mi propio codigo de la siguiente manera, para indicar que todo el sitio ya no esta.

 


RewriteEngine On

#Indicar que todo el sitio no esta disponible
RewriteRule ^(.*)$ - [G]

Enlace al comentario
Compartir en otros sitios web

  • 1 year later...

Cuando se utiliza ErrorDocument 410, significa que un elance existio en algun momento, o un item, estaba publicado, y que tanto google como cualquier otro buscador, lo tiene indexado, la gente lo encuentra, y cuando sigue en enlace.. tu servidor ya no puede mostrarlo. En ese momento se gerenera un llamada de error 404 - No encontrado.

 

El codigo de error 410, es una opcion que tiene el protocolo HTTP/1.1+ para diferenciar entre algo que un buscador no encuentra, pero sigue estando, y lo que no encuentra.. porque no esta mas, y no va a estar mas, y debe desindexar.

 

Lo normal es obtener un error 404, ahora bien, mediante el uso de .htaccess y de directivas podemos personalizar nuestros errores por un lado, y facilitar la desindexacion de url que ya no existen mas.

 

 

Cuando uno no quiere que 1 enlace siga indexado en google, o cualquier otro buscador, debe utilizar el archivo robots.txt

 

Se puede agregar directamente lineas al archivo robots.txt para eliminar 1 enlace especifico:

 

User-agent: *

Disallow: /es/product.php?id_product=1000

Si deseamos bloquear el acceso a todo el sitio solo usamos un slash (/).

 

 

Disallow: /

 

 

- Si deseamos bloquear el acceso a un directorio específico y lo que hay dentro del contenido, lo hacemos mediante un slash y después de este el nombre del directorio.

 

 

Disallow: /micarpeta/

 

 

- Si deseamos bloquear una página específica se coloca después del Disallow.

 

 

Disallow: /mipagina.html/

 

 

- Si deseamos quitar una imagen del buscador de imágenes de Google, lo hacemos de la siguiente forma:

User-agent: (robot buscador de imágenes) Googlebot-Image

 

 

Disallow: /img/miimagen.png

 

Puedes ver mas info sobre robots.txt aqui

 

 

 

 

Recuerda que todas las directivas de .htaccess responden a las normas del servidor apache en el cual este configurado. (Mas alla que debes tener tu hosting bajo Apache y el administrador debe permitir ejecutar .htaccess)

 

Dentro de estas normas, las mas comunes son:

 

- Herencia: El archivo .htaccess afecta al directorio donde se encuentra alojado y a los subdirectorios, pero a la ves hereda las directivas si existe otro archivo .htaccess previo en el arbol de directorios.

 

- Tamaño: El archivo .htaccess se ejecuta con cada solicitud, a medida que agregamos lineas, hay que hacer mas verificaciones para mostrar cada pagina. Un error en el codigo puede hacer que toda tu pagina ande mal, o responda mas lento.

 

- Comentarios: Si bien sabemos que usar un # delante de la linea genera una linea de comentarios, no todos los caracteres pueden ser "comentados". Normalmente no hay que incluir otros caracteres especiales o muchos comentarios ya que SI generan un error al ejecutarse, ya me ha pasado.

 

Hay una diferencia entre:

 

# Esto es un comentario en .htaccess

# El "mejor" de los <omentarios!! en |.htaccess|

 

Puedes encontrar mucha informacion sobre codigos de error personalizados en la pagina de Apache

 

 

Si quieres pobrar tus propias paginas personalizadas, puedes crear un htaccess similar a el siguiente ejemplo:

 


# Errores personalizados
ErrorDocument 404 /develop/codigo_de_errores/404-notfound.html
ErrorDocument 410 /develop/codigo_de_errores/410-gone.html

 

Ese codigo equivale en este momento al siguiente enlace:

 

http://www.nivelextremo.com/develop/codigo_de_errores/404-notfound.html

 

o

 

http://www.nivelextremo.com/develop/codigo_de_errores/410-gone.html

Enlace al comentario
Compartir en otros sitios web

Gracias por la fantástica explicación.

 

El problema que me he explicado mal.

 

El objetivo que estoy buscando es que en una serie de URL marcados por mi, en vez de reportar un error 404, reporten al usuario al tratar de acceder un error 410.

 

Digamos que queria FORZAR un error 410 en esas url´s.

 

Estuve probando con la directiva (Pero tampoco he conseguido el objetivo):

 

Redirect gone /es/product.php?id_product=1000

Enlace al comentario
Compartir en otros sitios web

Para que puedas buscar ese objetivo debes usar condiciones con rewriteCond y rewriteRule. Segun la condicion que tu quieres, forzar al error 410, que previamente definiste o personalizaste

 

Por ejemplo aqui, esta persona quiere remover:

 

Posts -> mywebsite.com/forum-viewtopic-p-xxx.html

Topics -> mywebsite.com/forum-viewtopic-t-xxx.html

Subforums -> mywebsite.com/forum-viewforum-f-xxx.html

 

Entonces puede dar la condicion para que si encuentra 1 resultado "forum-view" lo elimine + todo lo que siga, lo elimine

 

 

RewriteEngine On

RewriteRule ^forum-view(.*)$ - [NC,R=410,L]

 

 

Tambien puedes hacer 1 linea simple

RewriteRule forum-view - [G]

 

en tu caso particular, podrias probar y fijarte si funcionar

 

RewriteRule es/product.php?id_product=1000 - [G]

 

o por ahi mas simple

 

RewriteRule id_product=1000 - [G]

 

Eso significaria, que si coincide ese resultado en el enlace, le da GONE

 

 

 

Aqui tienes la explicacion en ingles

Enlace al comentario
Compartir en otros sitios web

Crear una cuenta o conéctate para comentar

Tienes que ser miembro para dejar un comentario

Crear una cuenta

Regístrese para obtener una cuenta nueva en nuestra comunidad. ¡Es fácil!

Registrar una nueva cuenta

Conectar

¿Ya tienes una cuenta? Conéctate aquí.

Conectar ahora
 Share

×
×
  • Crear nuevo...