Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/12/2012, 12:03
berto82
 
Fecha de Ingreso: octubre-2012
Mensajes: 40
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: Error de URLs por .htaccess

Bueno al final he decidido solucionarlo con php, al menos de momento me servirá. Para quien le interese lo he hecho así...

Código PHP:
<?
$urlnoamiga 
$_SERVER['REQUEST_URI'];
if (
substr($_SERVER['HTTP_HOST'],0,3) == 'www') {
    
header('HTTP/1.1 301 Moved Permanently'); 
    
header('Location: http://misitio.es'.$urlnoamiga); 
}
?>
Este trozo de código va en todas las páginas del sitio. Lo que hace es redireccionar al sitio sin www cuando se acceda con www. Si alguien quiere lo contrario aquí dejo el ejemplo...

Código PHP:
<?
$urlnoamiga 
$_SERVER['REQUEST_URI'];
if (
substr($_SERVER['HTTP_HOST'],0,3) != 'www') {
    
header('HTTP/1.1 301 Moved Permanently'); 
    
header('Location: http://www.misitio.es'.$urlnoamiga); 
}
?>
Además he puesto un código en las páginas dinámicas para que cuando se escriba algo que no exista se redireccione a error 404. Y también he agregado una condición para que redireccione a la url nueva si se accede a cualquier url que contenga "pagina.php". Esto último evita muchos errores con urls dinámicas en php.

Las páginas dinámicas en php típicas..
Código PHP:
pagina.php?valor=algo 
pueden verse con urls como...
Código PHP:
pagina.php/algo?valor=algo 
puedes hacer pruebas y comprobarlo por ti mismo.

Además cuando generas una url amiga también se puede acceder a la vieja o dinámica. Para solucionar estos dos problemas con php he hecho esto...

Para secciones...
Código PHP:
$urlnoamiga $_SERVER['REQUEST_URI'];
if(
strstr($urlnoamiga,'pagina.php')) {
    
header("HTTP/1.1 301 Moved Permanently");
    
header("Location: http://misitio.es/pagina");

Para páginas dinámicas tipo pagina.php?valor=algo
con url amiga tipo seccion/algo
Código PHP:
$urlnoamiga $_SERVER['REQUEST_URI'];
if(
strstr($urlnoamiga,'pagina.php')) {
    
header("HTTP/1.1 301 Moved Permanently");
    
header("Location: http://misitio.es/seccion/$variable");

Evidentemente la variable $urlnoamiga solo se declara una vez...
Código PHP:
$urlnoamiga $_SERVER['REQUEST_URI'];
if(
strstr($urlnoamiga,'pagina.php')) { 
    
header("HTTP/1.1 301 Moved Permanently"); 
    
header("Location: http://misitio.es/seccion/$variable"); 
}
if (
substr($_SERVER['HTTP_HOST'],0,3) == 'www') { 
    
header('HTTP/1.1 301 Moved Permanently');  
    
header('Location: http://misitio.es'.$urlnoamiga);  

He puesto todo esto aquí porque creo que es algo importante y que seguramente le pasará a muchos. Es una solución con php a problemas de contenido duplicado.

Por cierto y muy importante agregar una etiqueta canonical para informar de la url buena a los buscadores.

Código PHP:
<link rel="canonical" href="AQUÍ LA URL BUENA" /> 
Yo he puesto una etiqueta canonical en todas las páginas del sitio. Así todas quedan claras para los buscadores. Pues eso es todo, solo quería compartir esto para quien lo necesite y por si alguien quiere aportar algo.

pd: sobre la etiqueta canonical tengo que decir, que al menos hasta ahora, Yahoo y Bing(que por cierto ofrecen idénticos resultados) pasan olímpicamente de ella. Ya digo que hasta ahora, ya veremos...