A SEO-barát, szép webcímek világa 2.

Az előző részben egy nagyon egyszerű megoldást kínáltam a szép url-ekhez. Ami csak nagyon korlátozottan, néhány lapból álló honlapok esetén hatásos. Ebben a cikkben egy, jelenleg formájában egyszerű, de akár bonyolultabb működésre is képes alternatívát mutatok be.

<ifmodule mod_rewrite.c>
    RewriteEngine On
    RewriteCond     %{REQUEST_FILENAME}     !-f
    RewriteRule     .       index.php       [L]
</ifmodule>

Ebben a mintában csak egy pont található. A pont jelentése: egy tetszőleges karakter, így a szabály az, hogy ha a fájlnév legalább egy karakter hosszú, akkor az index.php-t fogja futtatni.

Ez azt is jelenti, hogy minden további teendőt rábízunk az index.php-ra. Neki kell majd eldönteni, milyen további php-ket futtat.

Az egyedüli, amire támaszkodhat, az a $_SERVER szuperglobális tömb, ami tele van hasznos adatokkal, egyik belőle az eredeti url, amit a webszerver megkapott. Ez egyrészt a $_SERVER['REQUEST_URI']-ből nyerhető ki, másrészt a $_SERVER['REDIRECT_URL']-ben is benne van. Utóbbi azért jobb, mert ha jön GET paraméter, akkor míg az REQUEST_URI-ban ez benne lesz, addig a REDIRECT_URL-ben már nem.

Maga az index.php pedig így néz ki:

<?

  if ( isset($_SERVER['REDIRECT_URL']) )  {

    // átirányítás volt
    $_ru = substr( $_SERVER['REDIRECT_URL'], 1 );

    // az url mélység szerinti szétbontása a /-ek mentén
    $_rp = explode( "/",  $_ru );

    // én egy alkönyvtárba raktam, így szükséges az első könyvtárat törölni
    // ha két mélységben lenne, pl. /proba/site, akkor 2x kellene, stb.
    array_shift( $_rp );

  } else {

    // nem volt átirányítás, az alapértelmezett oldal kiválasztása:

    $_ru = "index";  // az index
    $_rp = explode( "/",  $_ru );

  }

  // ellenőrizzük, hogy a kívánt url csak az angol kisbetűt tartalmazza-e:

  if ( preg_match( "/^[a-z]+$/", $_rp[0] ) ) {

    // ha igen, akkor szükséges még megvizsgálni, hogy létezik-e az oldal,
    // azaz van-e ilyen nevű php fájl a pages könyvtárban:

    if ( file_exists( "pages/".$_rp[0].".php" ) ) {

      // ha létezik, akkor meghívjuk

      include "pages/".$_rp[0].".php";

    }

  }

?>

A kód, azt hiszem, egy kis tanulmányozás után megérthető, ennek érdekében kommentálva is van. Észrevehető, hogy mintaillesztés itt is történik, csak itt php-ben. Erre itt biztonsági okokból van szükség.

A beüzemeléshez fontos információk:

  • attól függően, milyen mélységben rakjuk alkönyvtárba, szükséges további array_shift-es sorokat berakni, vagy ha a domain gyökérkönyvtárába raktad, akkor arra az egyre sincs szükséged (most egy mélység van beállítva, azaz pl. itt fog működni: http://localhost/kiprobalom/ )

  • szükséges létrehozni egy pages könyvtárat, amibe a kívánt oldalakat létre kell hoznod php fájlok formájában pl. ha a 'kiprobalom' könyvtárba készítetted, akkor azon belül legyen egy pages könyvtár és abban egy index.php és a többi kívánt oldal, pl. a kapcsolat.php a http://localhost/kiprobalom/kapcsolat megtekintésekor fog futni

  • a $_rp tömb tartogat viszont még valami hasznosat, ami akkor használható fel, ha a fájlra mint könyvtárra gondolunk. például http://localhost/kiprobalom/webshop esetén a pages/webshop.php fut, de mi lenne, ha ezen belül is szép urleket akarunk? Mint már utaltam rá: $_rp tömbben minden információ ott van. http://localhost/kiprobalom/webshop/kategoria/szoftverek webcím esetén is a pages/webshop.php indul el, így adja magát, hogy azon belül vizsgáljuk meg a $_rp[1] értékét, ha 'kategoria', akkor további vizsgálatot csinálhatunk $_rp[2] értékére, ha "szoftverek", akkor ki kell rakni a webáruházban található szoftver kategóriájú termékeket. Ugyanez a megoldás cikkek, blog vagy bármilyen más, könyvtár tulajdonságú honlaprésznél.

Ez az egyszerű átirányítás megnyitja a kaput a saját keretrendszer készítése előtt, amivel olyan gyors honlapkészítés és -fejlesztés érhető el, amely nélküle sehogy. A következő cikkek már erről fognak szólni.