uprava linku na přehlednější

U mnoha webů jsem si všiml, že jsou pěkné odkazy. Tz. už tam není např. www.neco.cz/index.php?str=sluzby$detail=20 atd. ale místo toho už je vidět např. www.neco.cz/sluzby/prezentace/ ....
Chtěl jsem se zeptat, jak něco takového vytvořit.

Nyní vytvářím stránky způsobem, že V indexu.php mám kromě hlavičky a dalších tento skript.

// skript, který zpracovává data nyní //

if (!isset($_GET['str'])) {
$stranka = "uvod";
} else {
$stranka = $_GET['str'];
$str = $_GET['str'];
$strx = '?str='.$str.'';
}
if ($stranka=="" || $stranka == "index") { $stranka = "uvod"; }
$soubor = ''.$stranka.'.php'; // k názvu se připojí cestu do adresáře zepředu a příponu zezadu

if (!file_exists($soubor)) {
$soubor = "error.php"; // pokud neexistuje soubor, který chceme includovat, bude se vkládat soubor error.php
}

// konec skriptu

V praxi to znamená, že když dám "/index.php?str=sluzby", tak se mi otevře soubor sluzby.php a pokud je více funkcí, tak se odkaz ještě delší


Nově bych chtěl, aby ty linky nebyli takové divné, ale pěknější dle názvů. Strukturu si chci vytvořit v databázi. A už bych nedělal soubory (např. sluzby.php, kontakty.php ... o_nas.php), ale byl by jen jeden soubor např. page.php a ten by to převáděl.

příklad struktury v DB

tabulka PAGE
id, pod_id, nazev, text, .....
1, 0, služby, Tady je text..., ....
2, 1, Pod služby, Tady je další text ....., ....
3, 0, Kontakt, Tady je kontakt ..., ...

A odkazy by vypadali
www.neco.cz/sluzby/
www.neco.cz/sluzby/pod-sluzby/
www.neco.cz/kontakt


Poradtě mi prosím, jak tyto odkazy vytvořit.

Děkuji moc
Je to snadné: do google zadej vyhledat - pěkná url - a studuj a studuj...
Tak nad tím sedím celý den a zjistil jsem, že se to řeší funkcemi mod_rewrite a htaccess.

Když si vytvořím soubor .htaccess a do něj vložím níže uvedený skript, pořád se nic neděje. Skript testován na webu www.drevorezby.eu

RewriteEngine on
RewriteCond %{HTTP_HOST} ^drevorezby.eu$
RewriteRule ^/(.+).html$ /index.php?akc=$1 [L]

Chtěl jsem si ověřit, zda ty odkazy, co jsou za ?akc=$1 ,zda se musí načítat přímo z DB nebo mohou odkazovat na samotné skripty např. kontatky.php sluzby.php atd.. Viz výše popis struktury, který používám dnes.
Okopírovat nějaký text nestačí. Musíš pochopit princip fungování mod_rewrite.

Mod rewite nedělá nic jiného, než že jen překládá (přepisuje=rewrite) adresy dle daných pravidel.

Máme třeba onen příklad:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^drevorezby.eu$
RewriteRule ^/(.+).html$ /index.php?akc=$1 [L]

Co je co?
RewriteEngine zapíná režim přepisování.
RewriteCond určuje podmínku, pro kterou aplikuje následující pravidlo.
RewriteRule aplikuje dané pravidlo.
Jedno pravidlo může mít více podmínek a jedna podmínka může mít více pravidel.

Jak to funguje?
Zapneme režim přepisování. Bez něj by se pravidla neprovedla.
Pak určíme podmínky, pro která budou následující pravidla provedena. Zde kontrolujeme, zda HTTP_HOST je drevorezby.eu. Pokud ne, tak pravidlo se neaplikuje. Pokud ano, pak se provede následující pravidlo. To znamená, že veškeré výskyty ^/(.+).html$ přepíše na /index.php?akc=$1. Příklad: /sluzby.html => /index.php?akc=sluzby.

Klient vidí pěknou URL (sluzby.html), ale PHP interpret už vidí skutečnou URL (/index.php?akc=sluzby). A podle té skutečné se pak pracuje. Je to vlastně to samé jako, kdybys do adresy zadal přímo /index.php?akc=sluzby.

Jak jsem říkal. Mod_rewrite nedělá nic jiného, než že jen překládá URL. Veškerou obsluhu pak provádí ten další (phpčko).
RewriteCond %{HTTP_HOST} ^drevorezby.eu$

Píšeš, že to zkoušíš na www.drevorezby.eu, ale ve skutečnosti testuješ drevorezby.eu. A to je rozdíl.

RewriteRule ^/(.+).html$ /index.php?akc=$1 [L]

Skutečně je nutné, aby nahrazovaný řetězec začínal lomítkem?

Zkus pro začátek vyhodit znaky "^" z obou řetězců a pokračuj ve zkoumání.
Tak jsem to zkusil přenastavit na localhostu a běží mi při první úrovni, ale nemohu přijít, jak vytvořit podsložky.

funkční:
----------------
localhost/drevorezby/prvni-strana volá stranu
localhost/drevorezby/index.php?akc=page&url_stranky=prvni-strana

a v .thaccess
RewriteRule ^([a-zA-Z0-9\\-]*)$ /drevorezby/index\.php?akc=page&url_stranky=$1 [L,NC]
----------------


tohoto odkazu nemůžu docílit, když nastavím RewriteRule, tak se mi těch
dosložek vytváří hodně ...
----------------
localhost/drevorezby/prvni-strana/podstranka volá stranu
localhost/drevorezby/index.php?akc=page&url_stranky=prvni-strana&pod_url=podstranka

a v .thaccess
RewriteRule ^/clanky2/([a-zA-Z0-9\\-]*)/?([a-zA-Z0-9\\-]*)/?$ /drevorezby/index\.php?akc=page&url_stranky=$1&pod_url=$2 [L,NC]
----------------

Nenapadá vás co s tím?