Lepší 301 / 404 přesměrování pro BLOG:CMS / F-ART:CMS
Webdesign, CMS
04.07.08
Pokud používáte BLOG:CMS 4.x či F-ART:CMS 5.x, tak si můžete zlepšit chování systému při nenalezení URL, popřípadě při nalezení starého URL (URL je tvořeno z názvu článku, takže při jeho změně se staré URL přes 301 Permanent Redict přesměruje na nové URL a neduplikuje se obsah, což vyhledávače penalizují).
V knihovně globalfunctions.php
si najděte funkci setGlobalVariables()
a sekci itemid upravte následovně:
/* item id */ if ($data[$i]=='itemid' || $data[$i]=='item' || ($type=='item' && $i==0) ){ if (is_numeric($data[$i+1])) $itemid=intval($data[$i]); else { if (strpos($data[$i+1],'?') !== false) $data[$i+1] = substr($data[$i+1],0,strpos($data[$i+1],'?')); $query = sql_query("SELECT iblog, inumber FROM ".sql_table('item')." WHERE iurltitle='".sql_escape(unicode_decode($data[$i+1]))."'"); if ($row = sql_fetch_object($query)) { // regular item URL $blogid = $row->iblog; $itemid = $row->inumber; } else { $query=sql_query("SELECT inumber FROM ".sql_table('plugin_fancierurl')." WHERE iurltitle='".sql_escape(unicode_decode($data[$i+1]))."'"); if ($row = sql_fetch_object($query)) { $itemid = $row->inumber; $exists = quickQuery('SELECT count(*) as result FROM '.sql_table('item').' WHERE inumber='.$itemid); if ($exists) { // article has a newer URL, so redirect header('HTTP/1.1 301 Moved Permanently'); header('Location: '.fancyLink($itemid)); exit(0); } } // item probably deleted or wrong URL header('HTTP/1.0 404 Not Found'); global $DIR_ROOT; if (is_file($DIR_ROOT.'error.html')) echo file_get_contents($DIR_ROOT.'error.html'); else printNiceMessage('HTTP/1.0 404 Not Found','Článek s URL <code>'.unicode_decode($data[$i+1]).'</code> nebyl nenalezen. Váš odkaz je pravděpodobně zastaralý. Použijte prosím funkci <strong>hledání</strong>.'); exit(0); } } if ($itemid) $i++; }
Rovněž bych doporučoval na 404 stránku (nalézající se v rootu webu s názvem error.html
) doplnit Google Custom Search, popřípadě hledání redakčního systému, jako je tomu zde.
Mimochodem tuto 404 můžete (po patřičných obměnách URL) použít volně v libovolném vašem projektu.
velice pěkně zpracovaná 404ka, děkuji a rád použiji.
Jen se zeptám, proč tam máte jednou HTTP/1.1 a jednou HTTP/1.0? Nemělo by to být podle toho, jaký protokol použije klient v requestu?
[2] je to úplně jedno. Všichni klienti dnes podporují HTTP/1.0 i 1.1