Egyéni kiterjesztésű PHP fájlok

Egyéni kiterjesztésű PHP fájlokGondolom nem vagyok egyedül, amikor azt mondom, hogy lassan kezdenek unalmassá válni a .php, .html, .asp és ehhez hasonló kiterjesztések az url-ek végén. Pár perc alatt “készíthetünk” egyéni kiterjesztéseket weben közzétett fájljainknak, ráadásul az eredeti fájl- és könyvtárstruktúra megtartásával.

Példának vegyük a következőt: szeretném, ha a weblapomon az unalomig ismert .php kiterjesztés helyett .blacky kiterjesztéssel kerülnének fel a fájljaim. Egyik – kézenfekvő – lehetőség, hogy átnevezgetem őket, azonban ekkor nem valószínű, hogy az Apache átküldi a php fordítón a fájlokat, és a korábbi linkelés többé nem fog működni, így például a Kedvencekbe mentett linkek 404-et adnának. (Persze az első problémát, a PHP feldolgozást, egy AddType direktívával .htaccess-ből vagy httpd.conf-ból megoldhatnánk)

Megintcsak az Apache-hoz készült mod_rewrite-ot fogjuk használni. Az adott könyvtárban hozzunk létre egy .htaccess fájlt, és töltsük fel a következő tartalommal:

1
2
3
4
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteRule (.+).blacky(\?[.+?])?$	$1.php$2
</IfModule>

Nézzük sorban: az IfModule rész (ami az és között található) csak akkor kerül értelmezésre, ha a megadott modul (esetünkben a mod_rewrite) megtalálható és be van töltve. Erre szükség van, mert ha nem kötnénk feltételhez a közte levő részt és a mod_rewrite nincs betöltve, akkor Internal server error-t kapnánk).

A következő sorban a RewriteEngine direktíva On értékre állításával bekapcsoljuk az újraírót, majd megadunk neki egy szabályt. Azoknak, akik jártasak a reguláris kifejezések (RegExp) világában, ismerős lehet. “Magyarra fordítva” a következő jelenti nagyjából: Ha a kért url bármilyen karakterből legalább eggyel kezdődik, majd van benne egy .blacky szöveg, majd van vagy egy kérdőjel után álló bármilyen sorozat vagy nem, akkor írd újra az url-t úgy, hogy a .blacky előtt álló rész mögé írj egy .php-t, majd ha valami állt a .blacky után, akkor azt a végére.

És így lesz mondjuk az /about.blacky url-ből /about.php, vagy a /hirek.php?hirazonosito=12-ből /hirek.blacky?hirazonosito=12.

Ezután már csak az oldalainkon található linkelést kell átírnunk, és kész is vagyunk az egyéniesített fájlnevekkel. Azon túl, hogy “személyesebbek” lehetnek a fájljaink még egy plusz biztonsági szintet is beépítettünk: még a PHP kézikönyv is ír az A PHP elrejtése c. fejezetében a fájl típus regtegetéséről. Nem nagy védelem, de ha már egy script kiddiet elijesztett oldalunk feltörésétől (vagy akár az erre tett kísérlettől) már hasznos volt.

Természetesen ennél még sokkal többet ki lehet hozni a mod_rewrite-ból, rengeteg további lehetőség van a mod_rewrite-ban…

14 HOZZÁSZÓLÁS

  1. Ennél több infót légyszíves ne mondj, szeretnénk kitalálni, vajon mi lehet a probléma mert túl sok szabadidővel rendelkezünk és találgatni olyan izgalmas dolog. ;)

  2. hm nekem se akaar működni..
    Csináltam egy .htacces-t, abba bemásoltam amit írtál, aztán csináltam egy teszt.blacky-t és azt írja ki hogy 404 error.

  3. 1. Milyen szerver? htaccess támogatás (Alow override a httpd.conf-ban) van? mod_rewirte van?
    2. A fenti lényege pont az, hogy nem teszt.blacky-t csinálsz, hanem teszt.php-t, csak a böngészőből hívod meg teszt.blacky néven!

    BlackY

  4. Nincs benne a RewriteBase / azért nem működött nekik.

    RewriteEngine On
    RewriteBase /
    RewriteRule (.+).blacky(?[.+?])?$ $1.php$2

  5. általában az ingyenes szolgáltatók nem engedélyezik a .htacces használatát. szóval lehet, h emiatt van a gondod.

  6. Üdv!
    Nekem működik ez az új fájl, de megoldható lenne az, hogy a .php kiterjesztést letilthassam, hogy a böngésző azt ne tudja megnyitni, vagy 404-et dobjon, és csak az uj kiterjesztést engedje (pl. index.blacky-t igen, és az index.php-t már ne)
    Köszönöm…

  7. Helló!

    Így reggel az első kávé közben az egyetlen épelméjű megoldás, amit ki tudtam találni, hogy elrejted a php fileokat: fogod az összeset, bedobálod egy hidden vagy akármi könyvtárba, és átírod a htaccess-t:

    1
    2
    3
    4
    5
    6
    
    <IfModule mod_rewrite.c>
    	RewriteEngine On
    	RewriteBase /
    	RewriteRule	^$	index.blacky [R=permanent,L]
    	RewriteRule (.+).blacky(?[.+?])?$	hidden/$1.php$2
    </IfModule>

    Sajnos ha letiltod a *.php-hez a hozzáférést (Order deny,allow, deny from all), akkor a .blacky néven keresztül sem lehet elérni… A fenti .htaccess 404-et dob a sima php kérésekre, viszont ha egy url-be bekerül a hidden/ (vagy akármi) is, akkor gond nélkül megnyitja :(

    BlackY

  8. És mi van, ha:

    1
    
    AddType application/x-httpd-php .php .blacky

    RewriteEngine-nel csinálva nekem így tökéletesen működött:

    1
    2
    
    RewriteEngine On
    RewriteRule ^(.*).blacky(.*)$ $1.php$2 [L]
  9. Hát sajnos ez nekem se akar menni akár melyiket próbáltam pedig ez tényleg jó ötlet.

  10. juj bocsánat fegyelmetlen voltam.Működik tökkéletesen köszönöm szépen neked.

  11. Én például a okhost.nál tároltatom a weboldalamat, és gond nélkül müködik. Csinálsz egy .htaccess filet. tehát simánt megnyits egy jegyzettömböt belemásolod a legfelül (

    1
    2
    
    	RewriteEngine On
    	RewriteRule (.+).blacky(?[.+?])?$	$1.php$2

    ezt. és elmented .htaccess így. és megvan, a másik a weboldalon nem úgy nyitsz meg egy linket hogy index.php hanem index.blacky és már müködni is fog, a másik hogy ilyenkor ajánlatos minden oldalba egy
    ilyet rakni, és behívni egy php fileból a navigációt, mert elég kényes lehet minden html-php filet módosítani, főleg ha az oldal nem 3-4 php/htmlből ál. remélem ennyivel tudtam segíteni :). Üdvözlettel Raim(oldalam http://wowaddon.clanbazis.com/index.wowaddon)

  12. Nekem ez bevállt:

    1
    2
    3
    4
    
    	RewriteEngine On
    	RewriteBase /
    	RewriteRule ^$ index.pc [R=permanent,L]
    	RewriteRule (.+).pc(?[.+?])?$ file/$1.php$2

    csak ennyi a gondom vele h pl a domain.com/test/alma.pc-re nem hoz be semmit mert a gyökérkönyvtárból kezdi el a file/ valamit ezt h lehet megoldani?

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét