Toon posts:

[PHP]Bestand Openen op site.com/dir/1

Pagina: 1
Acties:
  • 211 views sinds 30-01-2008

Verwijderd

Topicstarter
Hallo,

ik ben met mijn site bezig, en wil een gallery maken, waarbij mensen iets leuks kunnen posten, dat leuks krijgt dan een ID, te bereiken op website.com/gallery/1

leuks #1 word in de database gepropt, en dan wou ik dus als de url bijv website.com/gallery/1 linken naar index.php en dat je bijv via $_SERVER['REQUEST_URI'] het ID eruit plukken, maar als ik naar "website.com/gallery/1" surf, zoekt hij voor het bestand "1" , wat dus niet bestaat, hoe krijg ik het nu voor elkaar dat hij dan index.php opent? En hetzelfde voor welke willekeurig ID dat ik zou invullen.

Ik heb eigenlijk geen idee hoe je zoiets noemt, of het wel een naam heeft, enzo, daarom is misschien deze titel ook niet zo goed.

Als iemand me kan helpen, heel graag :),

thnx Aprominax

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
mod_rewrite ;)

[ Voor 68% gewijzigd door RobIII op 17-01-2007 23:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Mafkees
  • Registratie: Oktober 2003
  • Niet online
mod_rewrite is jouw ding. Daarmee kun je bijvoorbeeld /gallery/1 uit laten komen op gallery.php?ietsleuks=1. Het werkt door een .htaccess te maken en de RewriteEngine te gebruiken. Voorbeeldje:

code:
1
2
RewriteEngine on
RewriteRule ^gallery/([0-9]+) gallery.php?ietsleuks=$1


Succes! :)

[edit]
:( ... :P

[ Voor 3% gewijzigd door Mafkees op 17-01-2007 23:31 ]


  • mithras
  • Registratie: Maart 2003
  • Niet online
Wat ik liever gebruik in dit soort gevallen is alleen een .htaccess met de volgende inhoud:
code:
1
2
3
4
5
6
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)$ index.php/$1 [L]


En vervolgens in je php code:
PHP:
1
2
$url = explode("/", $_SERVER['PATH_INFO']);
array_shift($url);
Nu heb je dus de url http://domein.com/foo/bar opgesplitst in een array $url waarbij $url[0]="foo" en $url[1]="bar".

Op deze manier houd je de flexibiliteit in je url. Anders ben je er altijd aan gebonden dat bepaalde punten in je url als een bepaalde variabele worden doorgegeven. Wat Mafkees zegt, als je url gallery/iets is, is dat "iets" altijd (in dit geval) gevangen in de variabele $_GET["ietsleuks"]. Met je explode van path_info houd je die controle in je php code :)

[ Voor 13% gewijzigd door mithras op 17-01-2007 23:39 ]


Verwijderd

Topicstarter
Oke, bedankt, ik zie dat ik mod_rewrite moet hebben :), bedankt.
alleen als ik nu een stukje paste in htaccess (zoals "RewriteEngine On") heb ik al een 500 internal error, dus mis zo te zien die mod, ga even kijken of dat het is, maar ik nu nu iig weer verder :)

  • mithras
  • Registratie: Maart 2003
  • Niet online
Verwijderd schreef op woensdag 17 januari 2007 @ 23:42:
Oke, bedankt, ik zie dat ik mod_rewrite moet hebben :), bedankt.
alleen als ik nu een stukje paste in htaccess (zoals "RewriteEngine On") heb ik al een 500 internal error, dus mis zo te zien die mod, ga even kijken of dat het is, maar ik nu nu iig weer verder :)
Volgens mij niet. Het kan zijn dat mijn .htaccess niet helemaal goed is. Ik weet het niet precies (bij werkt het wel op deze manier), maar je kan bijv de / uit ^/(.*)$ halen, en met de base spelen.
offtopic:
En natuurlijk moet je index.php veranderen als die anders is ;)

Verwijderd

Nog een tipje:

Zoek eens op internet naar multiviews ;)

Daarmee is het ook erg gemakkelijk op te lossen.

[ Voor 30% gewijzigd door Verwijderd op 17-01-2007 23:48 ]


Verwijderd

Topicstarter
neej, het is index.php :).. en verder heb ik nog niet zover gekeken naar de rest, geen idee waar bijv. RewriteBase voor staat,. waarschijnlijk de mappen waarop het geldt ofzo, maar daar google ik wel even voor, hoeven jullie je tijd niet voor te verspillen hr ;).

Heb in httpd.conf zo'n "#" weggehaald voor ...mod_rewrite.so, nu lijkt het erop alsof ie het doet :), misschien heb ik het juist verpest, maar dat zal ik snel genoeg merken

EDIT: oh lol, heb nu een 400 error.. gaat lekker :)

[ Voor 5% gewijzigd door Verwijderd op 17-01-2007 23:54 . Reden: nieuw feit ]


  • mcdronkz
  • Registratie: Oktober 2003
  • Laatst online: 16-04 12:44
Verwijderd schreef op woensdag 17 januari 2007 @ 23:48:
Nog een tipje:

Zoek eens op internet naar multiviews ;)

Daarmee is het ook erg gemakkelijk op te lossen.
In de meeste gevallen ben je toch echt aangewezen op mod_rewrite, is zoveel flexibeler.

Verwijderd

Topicstarter
Ik heb even gekeken voor multiviews, maar omdat mod_rewrite ongeveer 100x zoveel resultaten gaf op google blijf ik daar toch maar bij, (begin ik eindelijk wat te snappen, zeggen ze dat het anders moet :P )

en het werkt nu wel volgensmij :)

nog een keertje THNX :D

Verwijderd

mcdronkz schreef op woensdag 17 januari 2007 @ 23:53:
[...]


In de meeste gevallen ben je toch echt aangewezen op mod_rewrite, is zoveel flexibeler.
Flexibeler, maar in de meeste gevallen ook enorme overkill.

Mod_rewrite kan nog veel meer als alleen fancy url's, vandaar dat er ook meer over te vinden is.

Wil je gewoon snel en simpel fancy url's krijgen dan is multiviews the way to go.

Het voordeel van multiviews is dat het zo goed als overal standaard supported is en je helemaal niets ingewikkelds hoeft te doen.

Alleen in een .htaccess zetten:

Options +Multiviews

En je bent al klaar...

Verwijderd

Topicstarter
oke, Multiviews en mod_rewrite werken allebei nu, maakt het dan nog verschil welke ik kies?

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Nadeel van Multiviews is alleen dat minimaal je base-"variabele" een bestaand bestand moet zijn. example.com/gallery/nog/meer/meuk naar een index.php 'redirecten' zul je op OS-niveau moeten oplossen, met bijv een simpel symlinkje onder *nix.

ln -s index.php gallery.php


Et voila, t werkt ook met gallery.php en je kunt gewoon doordevven in index.php...

[ Voor 19% gewijzigd door Osiris op 18-01-2007 00:34 ]


Verwijderd

Osiris schreef op donderdag 18 januari 2007 @ 00:32:
Nadeel van Multiviews is alleen dat minimaal je base-"variabele" een bestaand bestand moet zijn. example.com/gallery/nog/meer/meuk naar een index.php 'redirecten' zul je op OS-niveau moeten oplossen, met bijv een simpel symlinkje onder *nix.

ln -s index.php gallery.php


Et voila, t werkt ook met gallery.php en je kunt gewoon doordevven in index.php...
Dat kan, maar hoeft natuurlijk niet.

Je kan gewoon het bestandje gallery.php plaatsen en example.com/gallery is gewoon hetzelfde als gallery.php

Waarom zou je alles in index.php willen doen als je het ook gewoon in gallery.php kan doen?
Desgewenst include je gewoon index.php in gallery.php

What's in a name?

[ Voor 13% gewijzigd door Verwijderd op 18-01-2007 00:59 ]


  • Osiris
  • Registratie: Januari 2000
  • Niet online
Da's ook op OS-niveau IMO, 't filesystem ;)

De TS wilde gallery (URL) naar index.php (FS), dan ga je geen losse bestanden uppen als je ook een symlinkje kunt gebruiken. ;) IMO is een stapel symlinkjes netter/handiger dan losse "echte" files met een include.

[ Voor 19% gewijzigd door Osiris op 18-01-2007 01:01 ]


Verwijderd

Osiris schreef op donderdag 18 januari 2007 @ 00:59:
Da's ook op OS-niveau IMO, 't filesystem ;)

De TS wilde gallery (URL) naar index.php (FS), dan ga je geen losse bestanden uppen als je ook een symlinkje kunt gebruiken. ;)
Totdat je op een Windhoos systeem zit :P

Of geen shell access

Of geen mogelijkheid tot symbolic links op het gebruikte FS

Of een dynamische foldernaam waardoor symlinks niet werken..

Waarom zouden symlinks netter zijn als losse bestanden?
Je kan het verschil niet echt zien en wanneer je het wil overzetten naar een ander systeem werken de losse bestanden nog wel terwijl de symlinks dat niet doen.

Nog een voordeel van losse bestanden:

Je kunt gemakkelijk een kleine wijziging maken in een los bestandje om een uitzondering te maken voor een bepaalde interface (bijvoorbeeld iets omschrijven voor backwards compatibility).

[ Voor 50% gewijzigd door Verwijderd op 18-01-2007 01:08 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Dit staat allemaal ook letterlijk in onze PHP-FAQ. :) Hier is prima zelf uit te komen zonder een eigen topic. aprominax, lees de volgende keer voor je een topic opent eerst even de FAQ door; grote kans dat het antwoord op je vraag daarin voorbij komt. ;)

'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.

Pagina: 1

Dit topic is gesloten.