1 ошибка, чтобы убить ... Позволяя PHP генерировать канонический - PullRequest
1 голос
/ 17 января 2011

для создания чистого канонического URL, который всегда возвращает 1 базовый URL, я застрял в следующем случае:

<?php
# every page
$extensions = $_SERVER['REQUEST_URI'];  # path like: /en/home.ast?ln=ja
$qsIndex = strpos($extensions, '?');    # removes the ?ln=de part
$pageclean = $qsIndex !== FALSE ? substr($extensions, 0, $qsIndex) : $extensions;
$canonical = "http://website.com" . $pageclean;   # basic canonical url
?>

<html><head><link rel="canonical" href="<?=$canonical?>"></head>

при URL: http://website.com/de/home.ext?ln=de
канонический: http://website.com/de/home.ext

НО Я хочу также удалить расширение файла, будь то .php, .ext .inc или любое другое расширение с двумя или тремя символами .[xx] или .[xxx], поэтому базовый URL становится: http://website.com/en/home

Ааа, намного приятнее! но как мне добиться этого в текущем коде? Любые советы приветствуются +!

Ответы [ 2 ]

2 голосов
/ 17 января 2011

Думаю, это должно сработать, просто удалите конец, если есть расширение, как вы это сделали для строки запроса:

$pageclean = $qsIndex !== FALSE ? substr($extensions, 0, $qsIndex) : $extensions;
$dotIndex = strrpos($pageclean, '.');
$pagecleanNoExt = $dotIndex !== FALSE ? substr($pageclean, 0, $dotIndex) : $pageclean; 
$canonical = "http://website.com" . $pagecleanNoExt;   # basic canonical url
1 голос
/ 17 января 2011

попробуйте это:

preg_match("/(.*)\.([^\?]{2,3})(\?(.*)){0,1}$/msiU", $_SERVER['REQUEST_URI'], $res);
$canonical = "http://website.com" . $res[1];

и $ res [1] => чистый URL; $ res [2] = расширение; $ res [4] = все после "?" (если есть и если нужно)

...