[PHP] Multiviews

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het verbaast me dat dit nog nooit behandeld is geweest in een topic op tweakers.
Genoeg topics over multiviews, maar toch vind ik er niet tussen wat ik zoek, namelijk een probleem met de slashes "/" in een url

Ik heb de optie multiviews in de httpd.conf file ingevoegd.
En het blijk ook te werken, ik kan index?id=2 bevoorbeeld perfect gebruiken (zonder .php dus).

Maar ik wil index/2 gebruiken, en dat lukt niet.
hij gaat zoeken naar de dir index (die niet bestaat) en dus krijg ik een 404


Help me aub, ik ben ten einde raad.

[ Voor 4% gewijzigd door Verwijderd op 20-02-2005 00:24 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Kijk eens naar mod_rewrite

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb even voor je gezocht, et voila.


De workaround, omdat niet iedereen in staat is multiviews toe te passen op bovenstaande manier:
---

Je maakt een Errordocument (een 404 error) aan in je .htaccess. (Zie deze tut.)
Deze errorpage laat je verwijzen naar bijvoorbeeld 404.php.

Stel dat je multiview-url www.example.com/foe/home is...
In 404.php roep je dan de $_SERVER["REQUEST_URI"] op, deze geeft dan /foe/home terug.
Even exploden op de slash, en dan kun je met die array vanalles doen wat je wilt!

Voorbeeld van 404.php:
PHP:
1
$ex = explode('/', $_SERVER["REQUEST_URI"]);

$ex[1] bevat nu foe
$ex[2] bevat nu home
Met deze variablen kun je nu vanalles doen.

Nog een voorbeeldje: www.example.com/nieuws/23...
Met bovenstaande code krijgen we:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$ex[1] = "nieuws";
$ex[2] = "23";
Code:$file = "{MAP}".$ex[1] .".php";
if file_exists($file)
{
$id = $ex[2];
include($file);
}
else
{
// hier komt het 'echte' 404 gedeelte
echo "De opgevraagde pagina bestaat niet";
}

Met deze code kun je www.example.com/nieuws.php?id=23 dus omzetten in www.example.com/nieuws/23.
(Je moet/kunt voor {MAP} je eigen mapnaam invullen


Het werkte hier, dus werkt hoogswaarschijnlijk ook bij jou, veel plezier :Y)

[ Voor 40% gewijzigd door Verwijderd op 20-02-2005 08:08 ]


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 21-09 00:18
Verwijderd schreef op zondag 20 februari 2005 @ 08:03:
Ik heb even voor je gezocht, et voila.


De workaround, omdat niet iedereen in staat is multiviews toe te passen op bovenstaande manier:
---

Je maakt een Errordocument (een 404 error) aan in je .htaccess. (Zie deze tut.)
Deze errorpage laat je verwijzen naar bijvoorbeeld 404.php.

Stel dat je multiview-url www.example.com/foe/home is...
In 404.php roep je dan de $_SERVER["REQUEST_URI"] op, deze geeft dan /foe/home terug.
Even exploden op de slash, en dan kun je met die array vanalles doen wat je wilt!

Voorbeeld van 404.php:
PHP:
1
$ex = explode('/', $_SERVER["REQUEST_URI"]);

$ex[1] bevat nu foe
$ex[2] bevat nu home
Met deze variablen kun je nu vanalles doen.

Nog een voorbeeldje: www.example.com/nieuws/23...
Met bovenstaande code krijgen we:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$ex[1] = "nieuws";
$ex[2] = "23";
Code:$file = "{MAP}".$ex[1] .".php";
if file_exists($file)
{
$id = $ex[2];
include($file);
}
else
{
// hier komt het 'echte' 404 gedeelte
echo "De opgevraagde pagina bestaat niet";
}

Met deze code kun je www.example.com/nieuws.php?id=23 dus omzetten in www.example.com/nieuws/23.
(Je moet/kunt voor {MAP} je eigen mapnaam invullen


Het werkte hier, dus werkt hoogswaarschijnlijk ook bij jou, veel plezier :Y)
dit is toch enorm onzinnig. Als je er voor zorgt dat je .php files ook zonder de punt kan aanspreken en je multiviews met apache kan gebruiken.. Verder zou ik niet zomaar files met file_exists includen. Straks is die server zo lek als een mandje en liggen gevoelige dingen opstraat

|>


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ehm, volgens mij krijg je ook nog een 404 header bij het gebruik van errordocuments, lijkt me ook niet echt ehm handig ;)

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Op mijn site heb ik voor elkaar gekregen door de volgende functie te maken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
function multiviews($param)
   {
      $param = split('/', $param);
      $queryvars = array();
                
      for ($i=0;$i < count($param);$i++)
    {
       if (!$param[$i] == '' )
        {
           $queryvars[] = $param[$i];
        }
    }
      return $queryvars;
   }
?>


Deze roep je dan aan met multiviews($_SERVER['REQUEST_URI']). Je krijgt dan een array terug met alle elementen. Als je URL http://www.atlex.nl/index/site is, bevat de teruggegeven array alleen "site". Lege items (http://www.atlex.nl/index//site) worden gefilterd, daar heb je dus geen last meer van.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

AtleX schreef op zondag 20 februari 2005 @ 11:26:
Deze roep je dan aan met multiviews($_SERVER['REQUEST_URI']). Je krijgt dan een array terug met alle elementen. Als je URL http://www.atlex.nl/index/site is, bevat de teruggegeven array alleen "site". Lege items (http://www.atlex.nl/index//site) worden gefilterd, daar heb je dus geen last meer van.
Vaak wil je die lege items juist wel hebben, bijvoorbeeld voor een pagina nummer (bij meerdere items op een pagina) terwijl ik geen subpagina wil hebben, dus dan laat ik die leeg :)

Acties:
  • 0 Henk 'm!

Verwijderd

Het is eigenlijk heel eenvoudig.

Sinds Apache 2 heb je ook de AcceptPathInfo directive nodig. Zet die op On en het zou moeten werken.

[ Voor 4% gewijzigd door Verwijderd op 20-02-2005 11:34 ]


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Erkens schreef op zondag 20 februari 2005 @ 11:30:
[...]

Vaak wil je die lege items juist wel hebben, bijvoorbeeld voor een pagina nummer (bij meerdere items op een pagina) terwijl ik geen subpagina wil hebben, dus dan laat ik die leeg :)
Als je die lege items wel wilt is de controle daarop eenvoudig uit mijn functie te slopen :). Zo ingewikkeld is hij nou ook weer niet.

[ Voor 53% gewijzigd door AtleX op 20-02-2005 11:37 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Weet je zeker dat je gezocht hebt op GoT?

Want deze topic gaat ook over multiviews en daarin geef ik een stuk code waarmee ik op mijn eigen sites werk met MultiViews.

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op zondag 20 februari 2005 @ 11:34:
Het is eigenlijk heel eenvoudig.

Sinds Apache 2 heb je ook de AcceptPathInfo directive nodig. Zet die op On en het zou moeten werken.
Bedankt, dit was het dus!
Gewoon even in de httpd.conf file de 2de regel er ook bij zetten:

<Directory /home/httpd/vhosts/*/httpdocs>
AcceptPathInfo on
Options Multiviews
Order Deny,Allow
</Directory>
Pagina: 1