Beste PHP'ers

Ik ben mijn website aan het herschrijven en nu wil ik controleren op de bezoeker niet de directe url invoert.
Even wat duidelijker omschrijven...
Mijn urls zien er als volgt uit:
www.mijnsite.nl/index/paginanaam/
Deze url wordt dmv .htaccess herschreven naar:
www.mijnsite.nl/home.php?p=paginanaam

Nu wil ik dat wanneer je naar www.mijnsite.nl/paginanaam.php gaat dat dit dan wordt geblokkeerd om zo te voorkomen dat de bezoeker de pagina zal zien zonder verdere opmaak die in home.php staat.

Weet iemand hoe ik dit kan controleren en eventueel kan verwijzen naar de juiste url?

Alvast bedankt voor de moeite en hulp
In ieder pagina (behalve home.php) dit zetten:

<?php
if(basename(__FILE__) != 'home.php')
  {
  header("Location: /index/".basename(__FILE__, ".php") . "/");
  }
?>


Als de bestandnaam NIET 'home' is... dan doorsturen naar /index/welk_naam_het_wel_is/

Werkt altijd ;).
@Eddy

Bedankt voor de snelle reactie. Het werkt alleen niet helemaal.
Als ik nu bijvoorbeeld naar:
www.mijnsite.nl/index/disclaimer/
ga dan wordt ie gelijk naar:
www.mijnsite.nl/index/
gestuurd.

Wat ik heb gedaan is jouw stukje code bovenaan mijn disclaimer.php zetten. Doe ik iets fout bij het implanteren of ligt het aan het stukje code?
Ik heb het zojuist nog even gewijzigd.

Wat geeft een echo __FILE__; trouwens?
(op home.php / disclamer.php etc)
Ik heb je laatste versie ook nog eens geprobeerd maar als ik die gebruik wil Firefox niet eens aan het verzoek beginnen om:
www.mijnsite.nl/index/disclaimer/
te openen omdat hij in een oneindige loop zou veranderen.

echo __FILE__; geeft in disclaimer.php C:\wamp\www\disclaimer.php als ik de disclaimer aanroep via www.mijnsite.nl/disclaimer.php en dit gebeurt ook wanneer ik de pagina aanroep via www.mijnsite.nl/index/disclaimer/

Voor zover ik het kan zien met mijn enigszins beperkte kennis van php gaat er iets mis bij de controle in de if structuur maar ik zou niet weten wat.

[edit]
Ik ben er al achter.

<?php
if($_SERVER['SCRIPT_NAME'] != '/home.php')
  {
  header("Location: /index/".basename($_SERVER['PHP_SELF'], ".php") . "/");
  }
?> 

Met deze code werkt het perfect.
In ieder geval bedankt voor het eerste zetje.
Vergeet niet dat $_SERVER niet volledig te vertrouwen is.
Dan is __FILE__ (of wat dan ook) wellicht veiliger.

Andersinds: maak alleen in home.php verbinding met je database en ze zien een lelijk, lege, foutvolle pagina ;). Ook niets aan het handje dus.
Of geef een nette 404.
Maar fijn dat dit ook werkt.

Ps wellicht wel slim om een basename() over die $_SERVER te gooien. Er kan dan al niet meer gekloot worden met de bestandnaam (denk aan XSS).

Reageren