Tento návod může pomoci těm, kdo chtějí zásadně změnit strukturu www adres na svém webu.
Předpokládejme, že máte tvořeny adresy v některém z těchto tvarů:
www.example.cz/index.php?clanek=NAZEV
www.example.cz/nejaky_skript.php?clanek=NAZEV
www.example.cz/?clanek=NAZEV
a chcete je změnit na lépe vypadající:
www.example.cz/NAZEV.htm
Vyřešit se to dá podstrkáváním v .htaccess souboru a změněním všech skriptů (souborů) na serveru, aby odkazovali na nové (ty lépe vypadající) adresy. Ke změně doporučuji nějaký editor schopný funkce "hledat a nahradit v souborech" a regulárních výrazů, například opensource CodeBlocks a PSPad.
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*).htm
RewriteRule .* index.php?clanek=%1 [nc,L,QSA]
Tento kód htaccess poté podstrčí místo každé .htm stránky na serveru skript index.php s příslušným parametrem.
Na to je třeba dávat pozor, pokud máte na serveru i jiné, opravdové .htm stránky.
Obejít to lze například používáním jiných koncovek - html, php nebo testováním, jestli soubor/složka fyzicky existuje pomocí htaccess.
Výše popsaný kód htaccess je vhodný pro nové weby nezaindexované vyhledávači. Pokud ale je Váš web již rozjetý, nebo již na starou verzi adres vedou externí odkazy, je třeba myslet i na přesměrování původních adres na ty nové.
Je potřeba přesměrovat staré škaredé odkazy na nové a místo těch nových zase podstrčit ty staré. Toho se mi ale bohužel nepodařilo docílit jen pomocí .htaccess - pokud někdo ví, jak zařídit, aby se to ve výsledku nezacyklilo, budu rád za komentář :).
Já to nakonec vyřešil přesměrováním těch starých adres pomocí php.
Moje výsledné řešení tedy používá jednoduchou strategii:
Můj skript index.php stále vykonává stejnou funkci, jen zobrazuje články podle nového parametru article .
Název tohoto parametru se nyní nezobrazuje v adresách a obvykle ho stačí změnit jen na jednom místě ve skriptu zobrazující články.
Upravený .htaccess soubor pro podstrkávání s novým parametrem article:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*).htm
RewriteRule .* index.php?article=%1 [nc,L,QSA]
Pokud tedy někdo přijde přes novou, správnou adresu, podstrčí mu to stránku index.php s novým parametrem a ta zobrazí článek.<?php if (isset($_GET["clanek"]))
{
$url="http://www.example.cz/".$_GET["clanek"].".htm";
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$url);
die("<html><body> Dokument byl přesunut na <a href=\"".$url."\"> ".$url." </a></body></html>");
}
?>
Takže ve zkratce - htaccess zaručí funkčnost nových adres a php přesměrování zajistí hladký přechod ze starých adres na nové.
[1] ALeš dne 01.09.2008:
Děkuji moc mě to pomohlo.