Mod rewrite

Mnohé stránky majú odkazovú štruktúru v tvare ?premenna=hodnota. Pomocou mod rewrite sa takýto tvar dá prepísať len na /hodnota

RewriteEngine  On 
RewriteBase  / 
 
RewriteCond  %{REQUEST_FILENAME}  !-d 
RewriteCond  %{REQUEST_FILENAME}  !-f 
RewriteRule  ^([^/]+)/?$  ?premenna=$1

Výsledok odkazov je nasledovný: domena.sk/hodnota1. Samozrejme premenných môže byť viacej: ?premenna1=hodonota1&premenna2=hodnota2 Potom prepisovanie vyzerá nasledovne

RewriteEngine  On 
RewriteBase  / 
 
RewriteCond  %{REQUEST_FILENAME}  !-d 
RewriteCond  %{REQUEST_FILENAME}  !-f 
RewriteRule  ^([^/]+)/?$  ?premenna1=$1 
 
RewriteCond  %{REQUEST_FILENAME}  !-d 
RewriteCond  %{REQUEST_FILENAME}  !-f 
RewriteRule  ^([^/]+)/([^/]+)?/?$  ?premenna1=$1&premenna2=$2

Výsledok odkazov je nasledovný: domena.sk/hodnota1/hodnota2. Pri troch premenných: ?premenna1=hodnota1&premenna2=hodnota2 &premenna3=hodnota3 sa prepisuje nasledovne

RewriteEngine  On 
RewriteBase  / 
 
RewriteCond  %{REQUEST_FILENAME}  !-d 
RewriteCond  %{REQUEST_FILENAME}  !-f 
RewriteRule  ^([^/]+)/?$  ?premenna1=$1 
 
RewriteCond  %{REQUEST_FILENAME}  !-d 
RewriteCond  %{REQUEST_FILENAME}  !-f 
RewriteRule  ^([^/]+)/([^/]+)?/?$  ?premenna1=$1&premenna2=$2 
 
RewriteCond  %{REQUEST_FILENAME}  !-d 
RewriteCond  %{REQUEST_FILENAME}  !-f 
RewriteRule  ^([^/]+)/([^/]+)/([^/]+)?/?/?$  ?premenna1=$1&premenna2=$2&premenna3=$3

Výsledok odkazov je nasledovný: domena.sk/hodnota1/hodnota2/hodnota3. Pri takomto prepise niekedy dochádza k nenačítaniu obrázkov, štýlov. Pre opravu sa na začiatok stránky pridáva

<base href="http://domena.sk">

Pridať komentár k článku

DANO: V skratke: toto sluzi len na pekne URL adresy...nepeknu ?site=uvod skrasli na /uvod v htaccess sa podmienka ci existuje, ci nie neda spravit. Toto ja osobne riesim cez php if(file_exists("include/$_GET[strana].php")) { include("include/$_GET[strana].php"); } else { include("include/uvod.php"); pricom htaccess zabezpecuje len upravu adresy. Nie je mi vsak jasne, preco nezobrazuje ziadny obsah, ked sa pouzije tvar s lomitkom...mate definovanu base href? }

gombalia: dobry den, chcem sa spytat ako je mozne osetrit to ze ked v premennej nacitam stránku ktoru potrebujem zobrazit v index.php ako index.php?site=uvod teraz mi to prepisuje na /uvod. Problem je v tom ze ked teraz zadam za lomitkom hociaky vyraz tak mi zobrazi sice index.php (horne menu a lave menu) ale kontext ziadny, nevihodi to ziadnu chybovu stranku (404) iba cisty index.php. Da sa v htaccess osetrit neako ze by mi zistilo ci premenna site (/index.php?site=$1) skutocne existovala? A ak nie tak by hodilo 404 este doplnim kod nacitania kontextovej stranky z index.php "<?php if (!$_REQUEST['site']){$_REQUEST['site'] = "uvod";} include("sites/".$_REQUEST['site'].".php"); ?> " dakujme za odpoved