Multiviews, mooie URL's
Deze tutorials is gemaakt voor mensen die hun URLs (URIs) mooi willen hebben, zonder '.php', '?' en '&'. Zo'n url bijvoorbeeld:
www.blaat.com/forum/listtopics/3808714
Ik ben op zoek geweest naar oplossingen voor dit probleem, en de volgende was het beste: Multiview. Multiview houdt in dat je je url 'mooi' houdt. Het is ook nog eens goed voor het indexeren met zoekmachines; die willen nog wel eens .php bestanden maar één keer indexeren, dus bijvoorbeeld
www.blaat.com/forum/listtopics.php indexeren ze, maar
www.blaat.com/forum/listtopics.php?xxx=blaat nemen ze dan niet; dat is om ervoor te zorgen dat de spider niet in een oneindige loop terechtkomt.
Je hebt voor Multiview een "virual directory" nodig. Je maakt er een door iets toe te voegen in httpd.conf. Httpd.conf is een configfile die in je apache/conf directory staat. (als je een andere server draait of niet bij httpd.conf kunt komen is er wel een andere oplossing, maar daar maak ik misschien nog wel een keer een andere tutorial over.)
Voeg het volgende toe, het liefst aan het einde van het bestand om 't weer snel terug te kunnen vinden:
Code:
--------------------------------------------------------------------------------
<Location /forum>
DirectoryIndex site
ForceType application/x-httpd-php
</Location>
--------------------------------------------------------------------------------
Als je dat gedaan hebt, maak je het bestand forum aan.
!let op! Noem de file NIET forum.php. Apache zoekt namelijk naar het bestand forum, zonder iets er achter.
[voorbeeld 1]
Je voegt de volgende regels toe in het bestand forum:
PHP:
--------------------------------------------------------------------------------
<?
<?php
$path_array = split("/", $PATH_INFO);
if((count($path_array) % 2))
{
$i = 1;
while($i < count($path_array))
{
$var = $path_array[$i];
$i++;
$$var = $path_array[$i];
$var_name = $$var;
$i++;
echo("$var is $var_name!<BR>");
}
}
?>
?>
--------------------------------------------------------------------------------
$PATH_INFO is alles wat achter je filename in de url komt. Dat is dus in het geval
van 'www.blaat.com/forum/listtopics/38274280'
/listtopics/38274280. De split is om de informatie uit elkaar te halen.
De if is om te valideren of we een geldig aantal argumenten (2)
hebben.
Dan gaan we verder met een while loopje die alle informatie uit de url haalt. In dit geval dus de naam van de variabele (listtopics) en de informatie in de variabele (38274280).
$var_name = $$var; hoeft niet in je source te staan als je de informatie op deze manier probeert te echo'en, maar mijn PHP slikt $$ in een echo niet.
[/voorbeeld 1]
[voorbeeld 2]
Je voegt de volgende regels toe in het bestand forum:
PHP:
--------------------------------------------------------------------------------
<?
<?
$path_array = split("/", $PATH_INFO);
$file_path = "$path_array[1]".".php";
$i = "2";
$j = "0";
while($i < count($path_array))
{
$info[$j] = $path_array[$i];
$i++;
$j++;
}
if(file_exists($file_path))
{
include("$file_path")
}
?>
?>
--------------------------------------------------------------------------------
$PATH_INFO is alles wat achter je filename in de url komt. Dat is dus in het geval van 'www.blaat.com/forum/listtopics/38274280'
/listtopics/38274280. De split is om de informatie uit elkaar te halen.
De while-loop zorgt ervoor dat je om de variabelen eruit te halen, niet iedere keer om die 2 hoeft te denken; $path_array[2] wordt $info[0], $path_aray[3] wordt $info[1] etc. Op die manier is het makkelijker om andere while-loopjes te maken. Wil je echter een beetje snelheid besparen, kun je dit eruit houden. Je informatie is nu ook uit je file gehaald.
De computer kijkt nu of de file (listtopics.php) bestaat, en zo ja dan wordt die geopend. (in dit geval hoef je dus niet bang te zijn dat ze je kostbare source van listtopics jatten, maar het is wel wat moeilijker).
[/voorbeeld 2]
Ik heb je nu een opstapje gegeven om in je eigen website MultiView te gebruiken. Mail mij op okke.formsma@planet.nl als je nog iets leuks hebt gevonden over Multiview. Post hieronder als je commentaar en vragen hebt.