[PHP] Gebruiksvriendelijke URL geeft path problemen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Cubix
  • Registratie: Juni 2001
  • Niet online
Voor de site die ik aan het maken ben was ik van plan url's netjes te houden door met explode() slashes weg te halen, zodat ik geen lelijke vraag- en & teken parameters krijg.
Zo dus:
code:
1
list($dummy, $id) = explode('/', $_SERVER['PATH_INFO']);


Een url kan dan zo worden: http://website.com/lijsten.php/12/
in plaats van: http://website.com/lijsten.php?id=12
De variabele is dan met $id aan te roepen.

Het werkt goed, maar alle files die na die "explode-regel" nog in het html document worden aangeroepen (denk aan de css file en plaatjes) worden aangevraagd met een verkeerd path, namelijk in de map /lijsten.php/. Deze map bestaat natuurlijk niet, want het is het php bestand zelf. Het foppen gaat dus te ver door.

Nu is het een oplossing om alle aanroepen (css, plaatjes etc) naar een moedermap te laten verwijzen, maar dat is natuurlijk een smerige oplossing.
Een andere optie is ervoor zorgen dat die "explode-regel" na alle file aanroepen komt. Maar ik ben juist afhankelijk van de uitkomst voordat ik zaken kan gaan aanroepen.

Zijn er nette oplossingen voor dit probleem?

Acties:
  • 0 Henk 'm!

  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07 22:34
<base>-tag gebruiken.

Overigens, met mod_rewrite (apache, maar IIS kent het ook) kun je het allemaal eleganter oplossen. Voor PHP verandert er dan niets, maar je laat de webserver het omschrijfwerk doen.

[ Voor 87% gewijzigd door Fuzzillogic op 10-06-2005 15:39 . Reden: mod_rewrite info toegevoegd ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Heb je dit stukje uit onze FAQ al eens gelezen? Ik heb het gevoel dat je wat omslachtig bezig bent. :)

[ Voor 21% gewijzigd door NMe op 10-06-2005 15:39 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Gebruik http://website.com/style.css of /style.css om naar je CSS te linken.

http://website.com/lijsten/12/ (of nog beter: http://website.com/lijsten/lijsttitel/) vind ik trouwens mooier dan http://website.com/lijsten.php/12/

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

Zoals Nexxennium zegt; gebruik een base href tag in je head. Zoals hier, zeg maar ;)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Nu online
Inderdaad een <base> tag. Ik gebruik zelf eigenlijk altijd het volgende scriptje om met multiviews urls te werken. Alle variabelen komen in een $_URL array en de "base href" komt in de variabele $base.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
/* 
This script reads collects parameters added in the address bar of a browser into an array $_URL. If no parameters are given the $_URL array does not exist.
In addition the script returns a variable $base. This is an absolute URI to the containing directory of the real script. This can be used to prepend to a stylesheet location or to create a <base> tag.
*/

$URL = str_replace('.php', '' ,rtrim($_SERVER["REQUEST_URI"], '/'));
$SELF = str_replace('.php', '', substr($_SERVER["SCRIPT_FILENAME"], strlen($_SERVER["DOCUMENT_ROOT"])-1));

//create an array with the virtual directories requested by the host
if ($URL != $SELF && $URL .'/index' != $SELF) 
{ 
    $_URL = explode('/', str_replace($SELF .'/', '', $URL)); 
}

//create $base --> the base href for the page
$base_array = explode ('/', $SELF);
unset ($base_array[count($base_array)-1]);
$base = 'http://' .$_SERVER["HTTP_HOST"] .implode('/', $base_array) .'/';

//cleanup to avoid collision with vars used in the real page
unset($URL); unset($SELF); unset($base_array);

//included
$URLHANDLER = TRUE;
?>

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Cubix
  • Registratie: Juni 2001
  • Niet online
Ah, de base-tag! Voor het eerst dat die mij van pas komt. Bedankt, opgelost!
Dat was ik ook al van plan, maar omdat dit alleen maar extra verwarring zou kunnen veroorzaken wilde ik het probleem zo kaal mogelijk formuleren.
Pagina: 1