Чтобы создать канонический URL-адрес, вы должны убедиться, что у вас есть только нужные параметры, и вы также должны установить их в фиксированном порядке. Этот код делает это. Он фильтрует список параметров _GET и создает новый URL только с нужными. Я добавил несколько комментариев, чтобы вы могли легко настроить этот код в соответствии со своими потребностями.
Я использую array_filter, потому что я не уверен, что произойдет, если вы сбросите элементы массива в пределах foreach в массиве.
function params()
{
return array('b', 'c', 'a', 'z');
}
function checkParam($a)
{
// Checks if key $a is in array of valid parameters
return in_array($a, params());
}
function compare($a, $b)
{
return array_search($a, params()) - array_search($b, params());
}
function getCanonicalUrl()
{
$querystring = '';
// Copy and flip the array to allow filtering by key.
$params = array_flip($_GET);
// Filter out any params that are not wanted.
$params = array_filter($params, 'checkParam');
// If none remain, we're done.
if (count($params) !== 0)
{
// Sort the rest in given order
uasort($params, 'compare');
// Create a query string. Mind, name and value are still flipped.
$querystring = '?'.http_build_query(array_flip($params));
}
return
'http://'.
// $_SERVER['HTTP_HOST'] .
$_SERVER['SCRIPT_NAME'] .
$querystring;
}
print getCanonicalUrl();