Ak chcete aby URL vo vašej aplikácií či weblogu pôsobili na užívateľov dobre a prospievali vašej stránke zo strany vyhľadávačov používajte mod-rewrite.
Práca s Apache - mod-rewrite v .htaccess
Práca s Apache - mod-rewrite v .htaccess
Možno ste sa už stretli zo zaujímavými adresami URL napr. aj v tomto magazíne. Predpokladám, že nikoho nenapadne odkiaľ pochádza zdroj URL resp. aký skript práve spustil koncový užívateľ. Cieľom tohoto článku bude jednoduchá zmena URL na jej vylepšenú formu, čiže konečný výsledok by mal vplývať lepšie na vyhľadávače , užívateľa a celkový dojem zo stránky.
Ako začať?
Nebudem sa zameriavať priamo na nastavenie mod-rewrite na localhost ale budem pracovať rovno s hotovým nastavením. Obyčajne by však malo stačiť odkomentovať modul #modrewrite. Ako prvé vytvorím PHP kód, ktorý je sám zdrojom pre dlhé a škaredé URL adresy. Nasledujúci kód by mal takýto typ adresy zabezpečiť.
<?php #index.php
if(isset($_GET['id'])){
if(is_numeric($_GET['id'])){
echo "<p>Toto je článok číslo {$_GET['id']}</p>n";
} else {
die("<p>Nesprávny formát id</p>n");
}
}
?>
Po spustení skriptu skúste zadať url v tvare index.php?id=3. V momente bude do prehliadača zaslaný HTML kód a na strane užívateľa uvidíte výpis:
Toto je článok číslo 3
Vytvárame súbor .htaccess
Vytvorte si súbor .htaccess. Väčšinou by nemali nastať pri vytváraní tohoto súboru žiadne problémy ale sem tam sa môže vyskytnúť problém keď sa tento súbor vytvoriť nedá vôbec a to konkrétne v systémoch Windows. Pokiaľ tento problém u vás pretrváva skúste si ho vytvoriť, tak že ho rovno uložíte pomocou nejakého editoru alebo si ho stiahnite cez FTP.
Zapísanie pravidiel prepisovania URL
Ak už máme vytvorený súbor .htaccess môžeme začať s písaním pravidiel pre prepisovanie URL. V našom prípade sa pokúsime zmeniť napr. adresu index.php?id=3 na clanok3.html. Nenechajte sa zmiasť tou 3. Môže tam byť akékoľvek číslo ale nie písmeno. To by ste však už mali ovládať ak si prezriete PHP kód.
Do súboru zapíšte nasledujúce pravidlá:
RewriteEngine on RewriteRule clanok(.*)\.html$ index.php?id=$1
Pomocou RewriteEngine s atribútom "on" sme zapli mod-rewrite a nasledovné RewriteRule je definované pravidlo pre prepísanie našej adresy. Adresa index.php?id=$1 bude zmenená do tvaru clanok(.*).html.
Na čo si dávať pozor?
Predovšetkým sa nehrajte s .htaccess až natoľko, že vám stránka nebude fungovať. Pri akejkoľvek chybe v syntaxi bude koncový užívateľ presmerovaný na chybu 500. Čiže si môže myslieť, že stránka neexistuje. Toto by ste si ale pri editácií asi mali ihneď všimnúť. Záleží to však aj na nastavení súboru httpd-conf či sa užívateľ dostane tam kam vy nechcete.
URL adresa prepísaná
Teraz keď už súbor index.php a .htaccess je uložený v koreňovej zložke môžeme si vyskúšať do prehliadača zadať adresu index.php?id=25 a následne vyskúšame do prehliadača zadať aj adresu clanok25.html. Takto sa dajú meniť aj rôzne dlhé URL adresy.
Mod-rewrite je skvelá vec. Teraz sú v príprave články o .htaccess kde bude popísané mnoho o jeho možnostiach. Samozrejme netreba si spájať mod-rewrite a .htaccess, pretože sú to v podstate dve rôzne veci. Súbor .htaccess len použitie mod-rewrite sprostredkúva a mod-rewrite je len jedna malá ryba v rybníku, ak by som to mal prirovnať k počtu modulov na Apache.


![Hlasová verzia [Pre internetový prehliadač Opera] Voice](modules/items/voice.png)
Komentáre
ak odstranim .htaccess tak mam pravo.
v com moze byt problem ?
a potrebujem to zase,
a tykalo sa to db , ako pracuje napr tato stranka,
mam adresu
http://test.cz/produkt.php?kod=3iste mozem ju prepisat na test.cz/kod/3 alebo nieco podobne, len pre SEO by bolo idealne aby bol nazov produktu v url, a ten mam v db,
ako teda nato ?
//skusal som hladat vsade aj minulu odpoved co som tu dostal ale nic mno
diki
CREATE TABLE produkty (`id` INT UNSIGNED NOT NULL auto_increment PRIMARY KEY,
`url` VARCHAR(160) NOT NULL,
...
);
Stĺpec URL bude obsahovať reťazce ako napr. moj-oblubeny-produkt.
inu nedalo by sa to nejako inak ? lebo mam vyse 120 produktov a kazdemu vzdy priradovat url ... :( ,
napr. keby som dostal adresu
http://test.cz/produkt.php?kod=3&produkt=aloevera
ako to prepisem cez .htaccess , skusam navody ale akosi mi idu len tie jednoduchsie, ani by som neotravoval ale mam cas si to pozriet cez vikend a potrebujem to co najskor,
inu fakt diki za ochotu
RewriteEngine OnRewriteRule ^produkt\/([0-9]{1,})\/([a-zA-Z0-9]+)\/$ test.php?kod=$1&produkt=$2
Keď ti to nepôjde, vyskúšaj si dať pred test.php lomítko.
v
RewriteEngine onRewriteRule clanok(.*)\.html$ index.php?id=$1
ked nemam v premenej id=$1 cislo ale text? napr. index.php?id=zbrane
RewriteRule clanok([a-zA-Z0-9]+)\.html$ index.php?id=$1Prípadne je nutné doplniť ďalšie znaky, ktoré by sa v tom texte mohli objaviť (pomlčky, bodky...).