PHP expert |
|
Beste SilVeX, ik heb nu sinds kort ook hetzelfde probleem, mijn eigen navigatie systeem werkt niet meer. Dit komt omdat ik het nu doe via een webhost. Ik heb een beetje gegoogled hier en daar en ben tot de ontdekking gekomen dat het nogal omslachtig is om mijn script te gebruiken. Daarom heb ik me verdiept in mod_rewrite. Dit was zeer eenvoudig en makkelijker dan ik zelf gedacht had.
Dit is hoe ik het heb gedaan:
RewriteEngine On
RewriteRule ^index/(.*)/ index.php?p=$1
RewriteRule ^index/(.*) index.php?p=$1
RewriteEngine On RewriteRule ^index/(.*)/ index.php?p=$1 RewriteRule ^index/(.*) index.php?p=$1
Uitleg:
De eerste regel spreekt voor zich neem ik aan.
De tweede en derde regel zijn in principe hetzelfde, maar dat leg ik straks uit.
De tweede regel zegt dat het om een 'herschrijf-regel' gaat.
Als http://www.mijnsite.com/index/reg wordt aangeropen gaat ie intern aan de slag, hij plakt het stukje achter de index in $1.
De derde regel is bijna gelijk zou je zeggen, dat is ie ook wel, alleen die "/" die er niet staat zorgt ervoor dat je niet afhankelijk bent van een "/" op het uiteinde van je URL.
Oke dat was de .htaccess. Die je overigens in de root map moet stoppen van je site. Denk hierbij aan waar je index pagina staat, daar moet de .htaccess-file ook komen te staan.
Nu de php-code:
Op de index.php waar je waarschijnlijk je content van de pagina's wilt includen zet je deze code neer: (dit is overigens een eigen geschreven versie en kan naar smaak worden aangepast)
<?php
if($_GET['p'] == '')
{
include('home.php');
}
else
{
if(file_exists($_GET['p'].".php"))
{
include($_GET['p'].".php");
}
else
{
include("error.php");
}
}
?>
<?php if($_GET['p'] == '') { include('home.php'); } else { { include($_GET['p'].".php"); } else { include("error.php"); } } ?>
Dit is een zeer eenvoudig navigatie-systeempje.
Eerst wordt gekeken of de variabele $_GET['p'] leeg is,
indien dit het geval is, include home.php (of een andere file die je wenst als beginpagina).
Als $_GET['p'] NIET leeg is, gaat ie kijken of de aangeropen pagina bestaat PHP.net: (file_exists).
Als dit het geval is include de $_GET['p'] + de extensie .php erachter. Als de pagina niet bestaat, include je je eigen 404 pagina.
(In mijn geval error.php).
En nu als laatste: de links.
De links op je site worden nu als volgt:
http://www.mijnsite.com/index/reg/
http://www.mijnsite.com/index/home/
http://www.mijnsite.com/index/login/
etc.
Intern veranderd php de links naar:
http://www.mijnsite.com/index.php?p=reg
http://www.mijnsite.com/index.php?p=home
http://www.mijnsite.com/index.php?p=login
Maar extern (wat voor de gebruiker te zien is) worden het nette URLS. En dit komt je pagina's ook nog ten goede met Google. |