QueryString.php

Started by aBsTrAcTo, November 08, 2007, 04:31:02 PM

Previous topic - Next topic

aBsTrAcTo

Bueno. esta falla esta en smf desde hace ya varias versiones.

Aparentemente siempre nos muestra .html (si esta habilitado) Pero "aparentemente" por que siempre nuestra primer visita va a salir mal ya que los enlaces nos los muestra /foro/index.php?PHPSESSID=xxxxxxxx

Cuando se crea la cookie. ahi ya podemos ver html siempre.. elimininas tu cookie y vuelve a salir este detalle.

El problema aqui es. 1.- Como a googlebot no le vas a meter cookie. siempre ira cacheando tus urls con ?board= ?topic=

Las urls que cachea con .html son las que estan añadidas de modo manual en post, plantillas. o enlaces.

Busquen en querystring.php    // Debugging templates, are we?


Y de ahi al final. remplacen por
// Debugging templates, are we?

elseif (isset($_GET['debug']))

$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);



// This should work even in 4.2.x, just not CGI without cgi.fix_pathinfo.

if (!empty($modSettings['queryless_urls']) && (!$context['server']['is_cgi'] || @ini_get('cgi.fix_pathinfo') == 1) && $context['server']['is_apache'])

{

// Let's do something special for session ids!

if (defined('SID') && SID != '')

$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);

else

$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);

}



// Return the changed buffer.

return $buffer;

}



?>


Con esto ya tus urls con html seran cacheables.

Tambien es cacheable con sitemaps de googlehttp://www.google.com/webmasters/sitemaps/?hl=es

H@free


aBsTrAcTo

Con ese mod no hay problema ya que lo modifica

HotJoint

mm no entendi muy bien cual es el problema y en que ayuda la solucion que nos brindaste. podrias explicarle mejor a este noob?

aBsTrAcTo

ok.
http://www.campusvirtualsp.org/foros Haz tu primer visita
a cualquier link que des click te va a llevar a
/index.php?PHPSESSID=logenerado&board=27.0

si das despues un click a un tema ya te llevara a la ruta correctamente ejemplo;

http://www.campusvirtualsp.org/foros/index.php/topic,63.0.html

Apartir de esa segunda carga las urls de todo el foro ya se muestran correctamente.

Googlebot nunca ve las urls con .html al menos que sean enlaces en temas, mensajes o externos
http://72.14.253.104/search?sourceid=navclient&hl=es&ie=UTF-8&rls=GGLJ,GGLJ:2006-31,GGLJ:es&q=cache:http%3A%2F%2Fwww.campusvirtualsp.org%2Fforos%2Findex.php fijate en como toma las direcciones sin .html

lo cual afecta para tener nuestro foro bien optimizado.

con modificando el fichero tus direcciones se vuelven cacheables correctamente a como lo puedes ver aquí
http://72.14.253.104/search?sourceid=navclient&hl=es&ie=UTF-8&rls=GGLJ,GGLJ:2006-31,GGLJ:es&q=cache:http%3A%2F%2Fwww.losforosde.com%2Farte%2Findex.php

HotJoint

aaaa ya veo muy util!1 gracias :)

el-brujo

#6
bien por tu aprotación aBsTrAcTo.

Pero el $buffer de debug

   elseif (isset($_GET['debug']))

No hace falta tocarlo (creo)

La modificación sería simplemente cambiar:


if (defined('SID') && SID != '')
$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?(?:' . SID . ';)((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html?' . SID . '\$2\"'", $buffer);


Por:


if (defined('SID') && SID != '')
$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);


Y no sé si habría que modificar esta linea:

// Do nothing if the session is cookied, or they are a crawler - guests are caught by redirectexit().  This doesn't work below PHP 4.3.0, because it makes the output buffer bigger.
// !!! smflib
if (empty($_COOKIE) && SID != '' && empty($context['browser']['possibly_robot']) && @version_compare(PHP_VERSION, '4.3.0') != -1)
$buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '(?!\?' . preg_quote(SID, '/') . ')(\?)?/', '"' . $scripturl . '?' . SID . '&', $buffer);


Y poner el $buffer en .html y sin SID


aBsTrAcTo

Pues eso lo habia hecho desde hace mucho. Pero volvia a tirarme el mismo error (no cacheables correctamente)

Por eso elimino la linea de
if (empty($_COOKIE) && SID != '' && empty($context['browser'............

H@free

Había pensado que el seo4 realizaba esto, luego de revisarlo con tiempito no modifica tal modificación...

Lo he realizado y ahora creo que ya lo he solucionado gracias...  ;D

Iscate

#10
por que cuando intento modificar el querry no me funciona, por que cuando copio y intento pegar el texto no me lo copia como esta sino me lo pone todo en una linea, o sea horizontal

aBsTrAcTo

Creo que algo paso con el style de smf. por que antes creo recordar que si podias copiar y pegar
bien sin esto que comentas.

Por cierto con el mod seo4 no hace falta editar el querry. si lo editas antes de meter el mod.. te dara error siempre hay que instalar el modseo4  con el querry original.

se cachean bien


**   // Do nothing if the session is cookied, or they are a crawler - guests are caught by redirectexit().  This doesn't work below PHP 4.3.0, because it makes the output buffer bigger.
**   // !!! smflib
**   // Debugging templates, are we?
**   elseif (isset($_GET['debug']))
**         $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
**
**   // This should work even in 4.2.x, just not CGI without cgi.fix_pathinfo.
**   if (!empty($modSettings['queryless_urls']) && (!$context['server']['is_cgi'] || @ini_get('cgi.fix_pathinfo') == 1) && $context['server']['is_apache'])
**   {
**      // Let's do something special for session ids!
**      if (defined('SID') && SID != '')
**         $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
**      else
**         $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
**   }
**
**   // Return the changed buffer.
**   return $buffer;
**}
**
**?>

cada ** es un salto de linea.. copia pega y borra los dos **... no hagas el error de borrar todos los *. pues vienen en el codigo... borra los ** (dos asteriscos juntos)

MarioH

de ninguna forma me funciono.

probe enviando spider a mi web, y siempre entrada con la url larga.  y no pillaba los html

AimBox Comunidad online, Jugos, Anime, Warez.
[Aportes]: Ordenar SubForos || Smiles Tipo IPB || Agreement.txt ||

LogMare


Arkangel

al parecer este topic lleva mas 120 dias offline .. alguna solucion?

Advertisement: