PHP/MySQL Freelance
mobile: +39 3489215204
this was a problem with www.tecnomagazine.it :
http://www.tecnomagazine.it/recensioni/casio-exilim_ex-z60/442
could be accessed from /node/442
Solution is to redirect all /node/[0-9]* url to the aliased one
... and is very simple in code:
includes/path.inc :
function drupal_init_path() {
if (!empty($_GET['q'])) {
// add this conditional
if(preg_match('/node\/[0-9]*$/',$_GET['q'])) {
include "includes/common.inc";
$newq = trim(url($_GET['q']),'/');
if($newq!=$_GET['q']) {
drupal_goto(trim($_GET['q'],'/'),NULL,NULL,301);
}
}
$_GET['q'] = drupal_get_normal_path(trim($_GET['q'], '/'));
}
else {
$_GET['q'] = drupal_get_normal_path(variable_get('site_frontpage', 'node'));
}
}
drupal_init_path() is called in bootstrap as sixth pass and find the internal path (like /node/[0-9]*)
Here I check if the request contains already a normal path, check if there is
aliased path, if so goto that path and give 301