login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[php] Mod_rewrite urls

Offline Simax - 14/08/2008 13:46 (laatste wijziging 14/08/2008 15:05)
Avatar van SimaxOnbekend Ik ben bezig met de website van onze vriendengroep. Nu heeft ieder lid zijn eigen profiel. Deze is te benaderen via index.php?page=profiel&id=1(voorbeeld).

Nu zou ik dit graag anders doen..
http://www.site.nl/profielen/1

Iemand die mij hiermee zou kunnen helpen?
Simax

18 antwoorden

Gesponsorde links
Offline Abbas - 14/08/2008 13:48
Avatar van Abbas Gouden medaille

Crew .NET
Dit kan je doen aan de hand van URL Rewriting.
Offline Simax - 14/08/2008 13:55 (laatste wijziging 14/08/2008 15:05)
Avatar van Simax Onbekend Zou je mij hiermee een stukje op weg kunnen helpen?
Ik heb hier niet eerder mee gewerkt..

edit
Ik heb het volgende, maar naar mijn idee kom ik hier niet ver mee..
  1. RewriteEngine On
  2. RewriteRule ^index/(.*)/(.*)/ index.php?page=$1&id=$2

Zijn nu alle urls gedefinieerd zoals ik wil? Of moet ik dit voor iedere link opnieuw toepassen? En waar plaats ik mijn .htaccess bestand?
Offline timmie_loots - 14/08/2008 15:07
Avatar van timmie_loots PHP gevorderde Het is handig om bekend te zijn met de syntax van reguliere expressies. Meer info hierover vind je op regular-expressions.info (Engels).

Het voorbeeld dat jij geeft zou in principe moeten werken, als je invult "www.site.nl/index/pagina/1", dan zal index.php aangeroepen worden met in $_GET['page'] de waarde "pagina", en in $_GET['id'] de waarde 1.

Als je wil wat jij in je startpost aangeeft, kun je het herschrijven naar bijvoorbeeld dit:

  1. RewriteEngine On
  2. RewriteRule ^profielen/([0-9]+)(?:/)$ profielen.php?id=$1


Het nadeel daarvan is dat je per pagina een nieuwe regel toe moet voegen aan het .htaccess bestand voor iedere "soort" pagina dat deze "mooie" URL's moet krijgen
Offline Simax - 14/08/2008 15:16 (laatste wijziging 14/08/2008 15:16)
Avatar van Simax Onbekend
timmie_loots schreef:
Het nadeel daarvan is dat je per pagina een nieuwe regel toe moet voegen aan het .htaccess bestand voor iedere "soort" pagina dat deze "mooie" URL's moet krijgen

Dit vermoede had ik al. Zou het op een andere manier makkelijker kunnen dan? Ik wil graag alle paginas aanroepen op deze manier..
Offline Mythix - 14/08/2008 15:25
Avatar van Mythix Nieuw lid Als je met rewrites gaat werken kan je imo best een MVC design patroon hanteren in het coderen van je website.

http://www.site.nl/profielen/1

controller = profielen
task = 1

je gaat natuurlijk niet voor elke id een task aanmaken in de controller. Je maakt 1 default task aan die uitgevoerd wordt als de task niet gevonden wordt, wat dus het geval is als je een interger als id geeft.
In deze default task roep je dan de view aan die het correcte profiel weergeeft

en zo kan je in die controller bijvoorbeeld ook een task 'search maken om profielen op te zoeken, en dan bekom je netjes de URL:
http://www.site.nl/profielen/zoeken
Offline Simax - 14/08/2008 15:27 (laatste wijziging 14/08/2008 15:34)
Avatar van Simax Onbekend @Mythix,
Ik begrijp echt niet waar je het over hebt..

edit
Stel ik heb de volgende url:
localhost/community/?page=nieuws&id=1

Hoe zet ik deze dan om in?:
localhost/community/nieuws/1
Offline Mythix - 14/08/2008 15:36
Avatar van Mythix Nieuw lid MVC is een OOP design pattern dat ook implementeerbaar is in php. dit zorgt ervoor dat de code van de html gescheiden wordt, alles overzichtelijk blijft, makkelijk aan te passen is, ... enz

heb gemerkt dat er hie rop sitemasters ook een tutorial over staat:
http://www.site..._uitgelegd
Offline Simax - 14/08/2008 15:43
Avatar van Simax Onbekend En hier zou ik hetzelfde mee kunnen bereiken? Ik snap er bijna niets van zoals je waarschijnlijk al had verwacht 
Offline Mythix - 14/08/2008 16:07 (laatste wijziging 14/08/2008 16:45)
Avatar van Mythix Nieuw lid Je moet nog steeds het .htaccess bestand gebruiken dat ervoor zorgt dat je urls 'mooi' worden. Door gebruik te maken van het MVC patroon hoef je niet telkens je .htaccess bestand aan te passen indien je een nieuwe 'soort' pagina wilt, ik zal zo meteen een klein voorbeeldje in elkaar steken.

Ok hier komt het voorbeeldje, het is alles behalve mooi geschreven maar het is maar om het een beetje duidelijk proberen te maken.
Je doet er trouwens goed aan enkele artikels over MVC/Factory en andere dessign patterns door te nemen, op lange termijn bespaart dat je een hoop ellende

dit script gaat er van uit dan je .htaccess staat ingesteld op site.nl/profiel/1 redirect naar index.php?controller=profiel&task=1

over het .htaccess bestand ga ik niet uitwijken, hier ken ik zelf niet genoeg van

de code vindt je op http://www.plaatscode.be/15848/
Offline Simax - 14/08/2008 17:16
Avatar van Simax Onbekend Dit is misschien iets om later nog eens uitgebreid op terug te komen als ik wat gevorderd ben ik php. Nu wil ik gewoon simpelweg mijn urls netjes weergeven..

Dit lijkt mij het makkelijkste met mod_rewrite, maar hier heb ik niet genoeg kennis van.. dus misschien zou je mij hiermee op weg willen helpen?
Offline Mythix - 14/08/2008 17:19
Avatar van Mythix Nieuw lid Dan denk ik dat je best het advies van timmie_loots opvolgt, dat lijkt me het makkelijkste voor een snelle oplossing
Offline Simax - 14/08/2008 18:14 (laatste wijziging 14/08/2008 22:52)
Avatar van Simax Onbekend Dat denk ik zelf ook, maar wat hulp daarbij zou fijn zijn..

Wat zet ik in .htaccess als mijn link als volgt is:
localhost/community/?page=profiel&id=1

edit
Ik heb nu een .htaccess file in htdocs/community/.. Deze ziet er als volgt uit:
  1. RewriteEngine On
  2. RewriteRule ^index/(.*)/(.*)/ index.php?page=$1&id=$2
  3. RewriteRule ^index/(.*)/(.*) index.php?page=$1&id=$2
Offline Mmore - 15/08/2008 03:10 (laatste wijziging 15/08/2008 03:11)
Avatar van Mmore MySQL interesse Je wilt het zo:
  1. http://localhost/profielen/1

En het is zo:
  1. http://localhost/community/?page=profiel&id=1

Dan gebruik je:
  1. RewriteEngine on
  2. RewriteRule ^profielen/([^/\.]+) community/index.php?page=profiel&id=$1 [L]
Offline Simax - 15/08/2008 11:22 (laatste wijziging 16/08/2008 14:17)
Avatar van Simax Onbekend En waar plaats ik deze file dan?

edit
Ik heb de file nu werkende, maar normaal gesproken worden al mijn paginas geinclude binnen index.php. Nu worden de paginas direct geladen. Hoe kan ik dit verhelpen?
Offline Mmore - 16/08/2008 17:56
Avatar van Mmore MySQL interesse Sorry voor mijn late reactie, ik was deze topic helemaal vergeten.

Je plaats het bestand in je root index. Hoe zit dit includen precies in elkaar? Wordt alles geinclude in het root index.php bestand? Dus index.php?page=profiel&id=$1 bijv? Dat moet je dit namelijk even aanpassen in het .htaccess bestandje.
Offline Simax - 16/08/2008 19:16
Avatar van Simax Onbekend
Mmore schreef:
Dus index.php?page=profiel&id=$1 bijv?

Klopt, op deze manier word alles geinclude. Zou het ook anders kunnen? Misschien heb je tips voor mij?
Offline Mmore - 17/08/2008 19:25
Avatar van Mmore MySQL interesse Stel je include al je bestanden in je root index.php, dan moet je als volgt te werk gaan:

  1. RewriteEngine on
  2. RewriteRule ^profielen/([^/\.]+) index.php?page=profiel&id=$1 [L]


De url: http://url.nl/profielen/1
zal gezien worden op server als: http://url.nl/index.php?page=profiel&id=1

Zo wil je het toch?  Echt tips heb ik niet.. Ga er een beetje mee spelen zou ik zeggen, dat is meestal hoe ik nieuwe dingen aanleer! Success.  
Offline Simax - 18/08/2008 11:18 (laatste wijziging 19/08/2008 12:01)
Avatar van Simax Onbekend
Citaat:
Stel je include al je bestanden in je root index.php, dan moet je als volgt te werk gaan

Zou het ok anders kunnen dan? Zonder alles in index.php te includen? Als ik nu gebruik maak van: http://url.nl/profielen/1, word de pagina direct geopend, niet in index.php..

  1. ^profielen/([^/\.]+) index.php?page=profiel&id=$1

En kun je hier wat meer informatie over kwijt, aangezien ik in tutorials heb gezien dat ze het op een andere manier doen..
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.33s