Cool URL bez mod_rewrite

S problémom hostingu, kde nie je mod_rewrite povolený, som sa stretol už dávno. A jeden z nich je aj IC.cz, na ktorom hostujem ja. Pred mesiacom som si kúpil knihu 1001 Tipů a triků pro PHP od Jakuba Vrány a tam som sa dočítal o teoretickom postupe ako mať na stránke Cool URL aj bez mod_rewrite. A tak som sa rozhodol si pre to napísať knižnicu v PHP a poskytnúť ju svetu.

Pre tých čo nevedia čo to Cool URL sú, je tu malé zhrnutie, ak to viete môžete tento odsek preskočiť. Cool URL je URL oveľa vizuálne krajšia a pre používateľa ľahšie zapamätateľná. Porovnajte si napríklad „www.priklad.sk/?clanok=12“ a „www.priklad.sk/novy-clanok/“. Tento typ URL je vraj výhodný aj pre vyhľadávač pretože dané kľúčové slovo vidí aj v URL adrese.

Základné technické požiadavky na knižnicu sú PHP5 alebo vyššie a mať zapnutú v Apache konfiguračnú direktívu AcceptPathInfo. Väčšina dnešných hostingov toto spĺňa. Zapojiť knižnicu do už fungujúcej stránky nie je problém keďže je schopná automaticky presmerovať z URL starého typu na nové(do môjho starého a neprehľadného RS som ju zapájal asi hodinu, a to som sa mu v zdrojovom kóde nevŕtal rok 😀).

Stiahnuť ju môžete tu: CoolUrl_1.0

Zip obsahuje dva súbory, jeden je prehľadný kód knižnice a druhý je jej zredukovaná verzia. Vloženie do stránky je veľmi jednoduché. Knižnica sa musí načítať a spustiť pred akýmkoľvek vypísaním textu keďže používa funkciu Header().

<?php
    require_once 'CoolUrl.php';
    $coolUrl = new CoolUrl($model, $separator, $array);

Prvá premenná $model je určená pre model URL adresy stránky. Jednotlivé premenné sa zapisujú medzi @@, napríklad @premenna@. Pre názvy premenných platia rovnaké pravidlá ako pre premenné v PHP. Jednotlivé premenné sa oddeľujú znakom /. Model môže vypadať napríklad takto: clanok/@nazov@, @nazov@/@id@.

$separator sa automaticky dáva na koniec modelu a nahrádza znaky / v modeli. Automaticky je nastavený na /, takže pri vytváraní ho nie je povinné zadať.

$array je pole do ktorého sa uložia premenné z URL, automaticky je nastavená na $_GET, takže nie je povinné ho zadať.

Nevýhoda týchto URL je, že fungujú na základe ukladanie časti URL po .php do premennej $_SERVER[‚PATH_INFO‘]. Tým pádom vypadajú takto: clanok.php/nazov-clanku/. Toto chovanie sa dá ale obísť ak sú na Apache servery zapnuté vloby Options MultiViews a MultiviewMatch Handlers. Tento spôsob používa napríklad Wikipedia.

Knižnicu môžete voľne používať ako chcete stačí uviesť autora. Ak sa chcete takýchto zaujímavostí dozvedieť viac, odporúčam vám kúpiť si knihu 1001 Tipů a triků pro PHP.

V poslednej dobe som dostal nápad ešte na najmenej jeden článok, takže čoskoro tu možno bude ďalší článok.