Создание канонического с PHP

Мне нужен PHP-код для создания динамического канонического URL-адреса в <link /> следующим образом:

 <link rel="canonical" href="php goes here" /> 

Мой сайт использует PHP для генерации переменных следующим образом:

 http://www.mysite.com/script.php?var1=blue&var2=large&pointlessvar=narrow 

Я хочу, чтобы иметь возможность вернуть канонический URL-адрес, который удаляет &pointlessvar=narrow

И переустанавливает переменные таким образом, как я считаю нужным:

 <link rel="canonical" href="http://www.mysite.com/script.php?var2=large&var1=blue" /> 

Я хочу сделать это для SEO-целей, так как мой сайт содержит много переменных в разных заказах, которые дают разные URL-адреса для практически одного и того же контента (чтобы предотвратить дублирование в SERPS и сконцентрировать сок ссылки)

Может ли кто-нибудь предложить некоторый PHP-код, который я могу разместить в <link /> ?

Чтобы создать канонический 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(); 
 $path = "http://www.mysite.com/script.php?var1=blue&var2=large&pointlessvar=narrow"; $url = parse_url($path, PHP_URL_QUERY); // Fetch the query component of a url // Put the query into an array with the var name as the key parse_str($url, $query=array()); foreach ($query as $name=>$val) { // Check for pointless vars and unset() them here } krsort ($query); // Sort by array keys in reverse order. $pathex = explode('?', $path, 2); $npath = $pathex[0] . '?' . http_build_query($query); 

Существует больше функций сортировки, доступных php.
Они даже позволяют вам писать свою собственную функцию сортировки .

Вы можете смешать parse_url(); и http_build_query() чтобы перестроить ваш URL.

 $url = 'http://www.mysite.com/script.php?var1=blue&var2=large&pointlessvar=narrow'; $url = parse_url($url); $params = array(); $tmpParams = explode('&',$url['query']); foreach ($tmpParams as $param) { $tmp = explode('=', $param); $params[$tmp[0]] = (!empty($tmp[1])) ? $tmp[1] : null; } 

Затем перейдите через $ params, чтобы отменить бесполезные переменные, а затем перестроить с помощью http_build_query.

Вы можете использовать суперглобальный $ _SERVER и суперглобальный $ _GET, чтобы получить различные части URL-адреса. Вы можете изменить и фильтровать их в любом случае.