• Beste leden,


    ik ben bezig met het opzetten van een forum in de auto branche.
    Nu wil ik het volgende forceren:


    Er is een map met de volgende inhoud:
    application
    index.php


    In de map application staat het volgende:
    application -> connection (hierin staan alle database verbindingen)
    application -> functions (hierin staan alle functies)
    application -> modules (hierin staan alle modules)
    application -> template (hierin staan alle template bestanden)


    Nu gaat mijn vraag over de map modules:
    Ik heb hierin ook inhoud staan zoals:
    modules -> sitekeuring -> sitekeuring.php
    modules -> leden -> aanmelden.php


    Hoe gaan ik dit forceren met .htaccess dat het zo werkt:
    http://www.mijndomein.tld/aanmelden.php
    http://www.mijndomein.tld/sitekeuring.php


    Ik wil niet dat mensen de volledige link zien,

  • Concreet antwoord:


    Apache Configuration
    RewriteEngine On 
    
    
    RewriteRule ^aanmelden.php modules/leden/aanmelden.php [L]
    RewriteRule ^sitekeuring.php modules/sitekeuring/sitekeuring.php [L]


    Ik zou echter de manier die @AarClay zegt aanhouden, dat je zo iets krijgt:


    Apache Configuration
    RewriteEngine On 
    
    
    RewriteRule ^aanmelden modules/leden/aanmelden.php [L]
    RewriteRule ^sitekeuring modules/sitekeuring/sitekeuring.php [L]
  • Of kijk is naar wat ik vroeger had; github.com/GreyDevbe/modrewrite

    Waarom geen autoloader? :(
    En een blacklist voor URL-onderdelen? :/
    Een querystring parameter "route" die je meegeeft in de URL? Is ook niet nodig, lees gewoon $_SERVER['REQUEST_URI'] uit.
    Wellicht is dit een beetje gedateerd allemaal?


    Zie ook de tutorial.

    Sterker nog, ik heb hier een hele blog reeks over. Die tutorial is slechts een snippet.


    Trouwens, als je wilt dat die PHP-bestanden niet rechtstreeks benaderbaar zijn, wat ook kan gebeuren doordat namen van URL's en directories en namen van bestanden kunnen "botsen" (ook dit staat in de blogs uitgelegd) dat zet je je application directory toch gewoon buiten je webdirectory?

  • Oftewel, als je dit een beetje gestructureerd wilt aanpakken:


    1. zorg je dat je applicatie een single point of entry heeft, dit bereik je o.a. met een .htaccess bestand die alles naar de voordeur van je applicatie doorstuurt
    2. maak hierbij gebruik van een autoloader en organiseer je functionaliteit in klasses, bijvoorbeeld als volgt
    3. vervolgens moet je alles aan elkaar knopen door middel van routing in je applicatie


    Hoe uitgebreid dit laatste moet zijn hangt sterk af van de mate van vrijheid die je wilt hebben in de naamgeving van je URLs.


    Je zou het met een groot switch-statement kunnen doen zoals @Ferhat.Remory eerder aanhaalde als je het aan de PHP-kant wild hard coden, wat nog steeds de voorkeur heeft boven lopen prutten in je .htaccess bestand waarschijnlijk, of je bouwt dit zelf verder uit, ofwel in code, ofwel deels in een database in een soort van boomstructuur.


    Het voordeel van deze hele voorgaande opzet (.htaccess die alles naar index.php stuurt) is dat deze je voorbereidt op het verder afhandelen van een page-request in PHP zelf. In PHP kun je dit vervolgens helemaal programmeren zoals jij wilt. Dat is het hele doel van deze aanpak.


    Je zou ook bijvoorbeeld de hele URL kunnen beschouwen en kijken of hier (voor deze URL-omgezet-in-een-klassenaam) een router(-klasse) voor bestaat, die de URL verder ontleedt en door kan mappen naar een klasse die de paginacontent verder genereert. Bestaat de router niet, eet je een stukje van de URL op en herhaal je dit proces. Hiermee heb je dan ook meteen het probleem opgelost wat bij dit soort URLs komt kijken, namelijk welk deel van de URL is "vast", en welk deel van de URL zijn in feite parameters voor het "vaste" deel.


    Op het moment dat je geen autoloader gebruikt en/of een constructie met file_exists() hanteert dan heb je mogelijk ergens een afslag gemist waarbij je efficiënt gebruik kunt maken van een consistente naamgeving voor klassen. Je kunt namelijk een autoloader combineren met class_exists() - volgens mij was dit nog steeds / vele malen efficiënter dan file_exists(). Als je aangewezen bent op file_exists() dan wil dit in ieder geval / mogelijk zeggen dat er geen lijn zit in de naamgeving van je bestanden...

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!