Canonicalizacion con PHP
Escrito por: DavidM
Si te gusta lo que ves y te parece interesante, suscribete por email o por RSS. ¡Gracias por tu visita!.
Si tu web está alojada en un servidor que no tiene mod_rewrite habilitado, no puedes usar htaccess para canonicalizar el dominio (Ej. redirigir http://ejemplo.com a http://www.ejemplo.com).
La solución es insertar el siguiente código en el header antes de cualquier otro código PHP o HTML.
<?php
$redirect = false;
$path = $_SERVER['REQUEST_URI'];
$url = $_SERVER['HTTP_HOST'];
if ($url != 'www.ejemplo.com') {
$redirect = true;
}
if ($redirect==true){
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.ejemplo.com' .$path);
}
?>
Obviamente hay reemplazar "www.ejemplo.com" con el dominio de tu web.





Muchas gracias David, este código es muy útil. ¿Nos podrías decir cuáles son las ventajas de la canonicalización, por favor?
[...] suscribete por email o por RSS. ¡Gracias por tu visita!.El otro día escribí sobre cómo canonicalizar los dominios con PHP. Ahora toca hacer lo mismo con ASP. De hecho, este código ASP puede ser mucho más práctico que [...]
[...] pero si quieres mostrarles a los lectores de tu blog algún tipo de código como el código para canonicalizar las URLs con PHP, estas comillas que Wordpress crea automáticamente acaban siendo como un grano en el [...]
Con este código conseguimos que todas las URLs del tipo http: //ejemplo.com/lo-que-sea sean http ://www.ejemplo.com/lo-que-sea.
Pero si también se quiere contemplar el caso de http ://www.ejemplo.com/index.php o http ://ejemplo.com/index.php se redirija a http ://www.ejemplo.com/ hay que poner alguna cosa más. Así que he modificado un poco este código con lo que el resultado ha sido éste:
$redirect = false;$path = $_SERVER['REQUEST_URI'];
$url = $_SERVER['HTTP_HOST'];
if ($url != 'www.ejemplo.com' || $path == '/index.php') {
$redirect = true;
}
if ($redirect==true){header('HTTP/1.1 301 Moved Permanently');
if ($path == "/index.php") {
header('Location: http ://www.ejemplo.com');
} else {
header('Location: http ://www.ejemplo.com' .$path);
}
}
¡Espero que os sirva!
Todavía mejor.
- Canonicaliza el host: de www .example.com/loquesa a example.com/loquesea y viceversa.
- Canonicaliza el path: de host/loquesea/index.php a host/loquesa/. Por supuesto también de host/index.php a host/
< ?php
$target_host = "www .example.com"; // www .example.com or example.com
$redirect = false;
$path = $_SERVER['REQUEST_URI'];
$host = $_SERVER['HTTP_HOST'];
// Checking hostif ($host != $target_host) {
$redirect = true;
$host = $target_host;
}
$url = $host.$path;
// Checking path$pattern = "^(.*)(/index\.php)$^";
preg_match_all($pattern, $url, $match);
if ($match[0][0] != "") {
$redirect = true;
$url = $match[1][0] . "/";
}
// Redirectif ($redirect){
header('HTTP/1.1 301 Moved Permanently');
header('Location: http ://'.$url);
}
?>