login  Naam:   Wachtwoord: 
Registreer je!
 Forum

mod rewrite

Offline Dark_Paul - 12/09/2006 16:33 (laatste wijziging 14/09/2006 21:28)
Avatar van Dark_PaulPHP ver gevorderde Hej,

Kan iemand mij op weg helpen met .htaccess en urls. Ik denk zelf namelijk dat het met .htaccess moet, tenzij het anders kwam. Ik heb al wat gegoogled, maar ik snapte er niet veel van hoe 't nou moet 
Ik wil het volgende maken:
ik heb een map 'www', de gewone pagina, daar staat index.php waarop ik alles include. Daar hangen ook een aantal css-files ed aan vast.
Bij de site komt een admin-gedeelte, dat ik in de aparte map 'admin' zet. Hoe kan ik nou zorgen, dat als je deze url intypt: localhost/admin/?page=blaat dat de pagina admin/blaat.php wordt geïnclude in index.php die in de 'www' map staat? Ik hoef geen kant en klaar voorgekauwde antwoorden, alleen maar een zetje in de goede richting 
Ik weet trouwens ook niet zeker of url rewrite hier de goede benaming voor is..
Te vroeg gejuicht.. Het probleem is nu dat ik wel kan linken naar dingen zoals /blaat/?p=iets (kan ook met andere dingen ipv ?p= bijv ?id= ) maar als ik vervolgens naar een link ga, wordt mijn url bijv. blaat/iets/?p=.. als ik eerst op /blaat/ zat en daarna naar /iets/?p=.. wil gaan. Weet iemand hoe ik dit op moet lossen?

18 antwoorden

Gesponsorde links
Offline Rik - 12/09/2006 16:52
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Volgens mij is het 'mod rewrite' 

Kan dat niet met php? Gewoon de $_GET['page'] in admin/index.php includen met wat beveiliging.
Offline Dark_Paul - 12/09/2006 16:55 (laatste wijziging 12/09/2006 16:55)
Avatar van Dark_Paul PHP ver gevorderde okej, ik wist 't dus niet goed.
De vraag is hoe ik zoiets aan zou moeten pakken. Ik zit op 'www/index.php' en ik wil de pagina 'www/admin/blaat.php' includen terwijl de url er zo uitziet: localhost/admin/?page=blaat
Ik hoop dat ik duidelijk genoeg ben 
Zoals ik al zei, een voorzetje is genoeg, de rest ben ik wel bereid uit te zoeken 
Offline Rik - 12/09/2006 17:06
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Ik heb ff wat geexperimenteerd maar ik krijg localhost/admin/?page=blaat niet aan de praat, localhost/admin/blaat lukt wel:
RewriteRule ^admin/(.*) index.php?map=admin&page=$1

Toch een beetje voorgekauwd maar ik weet niet hoe ik het anders moet doen.
Offline ikkedikke - 12/09/2006 17:06
Avatar van ikkedikke PHP expert je vangt eerst het stuk achter de eerste / af, vervolgens herschrijf je de url naar /www/index.php?inc=//1
ongeveer;-)
Offline Dark_Paul - 12/09/2006 17:25 (laatste wijziging 12/09/2006 18:23)
Avatar van Dark_Paul PHP ver gevorderde @Boukefalos dat is dan ook al genoeg, het ging mij eigenlijk vooral om het stuk /admin/. Ik ga 't eens bekijken. Weet iemand trouwens hoe ik eigen gemaakt .htaccess-bestanden aan moet zetten op mijn localhost? Ik heb namelijk gemerkt dat custom .htaccess bestanden gewoon genegeerd worden..
@ikkedikke dat ga ik ook eens onderzoeken/google-en ;)
Allebei bedankt he!!

edit: het is me nog niet gelukt, ik moet eerst .htaccess werkend krijgen voordat ik verder kan hiermee Hoe kan ik .htaccess bestanden toestaan, want de server negeert ze atm. Ik wil 't liefst niet centraal regelen, want het stukje moet alleen gelden voor de map 'www' maar niet voor submappen. Ik heb Apache 2.0.59
Offline Rik - 12/09/2006 18:30
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
In je httpd.conf "AllowOverride All" toevoegen, je moet ook nog iets kunnen met aparte mappen maar dat snap ik niet echt:

Citaat:
#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
Offline Dark_Paul - 12/09/2006 18:46
Avatar van Dark_Paul PHP ver gevorderde hmm.. dat lukt nog niet. Zo ziet het stukje van mn httpd.conf er nu uit:
  1. <Directory />
  2. Options Indexes FollowSymLinks
  3. AllowOverride All
  4. </Directory>

ipv Options Indexes FollowSymLinks stond er oorspronkelijk Options FollowSymLinks maar dat werkt ook niet.
Ik heb bij iedere verandering mijn server herstart, dus ik denk niet dat het daaraan ligt.
Offline ikkedikke - 12/09/2006 19:56
Avatar van ikkedikke PHP expert rewrite-engine op on gezet?
Offline Dark_Paul - 12/09/2006 20:05 (laatste wijziging 14/09/2006 21:13)
Avatar van Dark_Paul PHP ver gevorderde jup, staat aan.
Zo ziet mn .htaccess er op 't moment uit (hij staat in de map 'www' waar index.php staat en vanwaar ik alles include):
  1. DirectoryIndex blaat.html, blaat2.html
  2. RewriteEngine On
  3. RewriteRule ^admin/(.*) index.php?map=admin&page=$1

edit:
Ik ging even rondsnuffelen in httpd.conf en zocht op 'rewrite'. Toen zag ik dat er nog een '#' voor de regel: LoadModule rewrite_module modules/mod_rewrite.so stond, dus geen wonder dat dat niet werkte ;)
Nog een edit
Hoe krijg ik de mod rewrite nu werkend? Ik heb de tutorial van de Apache site een beetje bekeken, maar ik kom er nog niet helemaal uit. Mijn paginasysteem is ?page=blaat&p=iets dan wil ik dat het /blaat/iets wordt, dus voor zover ik het nu snap zou daar zon regel voor moeten werken:
RewriteRule ^(.*)/(\?p=(.*)?)$ /index.php?page=$1&p=$2 (klopt dat?). Maar hoe moet ik dan linken? Moet ik mijn link gewoon 'normaal' opbouwen, dus verwijzen naar ?page=blaat&p=iets of moet ik verwijzen naar 'blaat/iets' en dan schrijft de mod rewrite het voor index.php weer om naar ?page=blaat&p=iets ? Ik snap het nog niet helemaal 
edit 3
Na wat spelen is 't me gelukt. Ik moet alleen de links ff aanpassen, maar dat is geen probleem. Ik ben het ermee eens dat mod_rewrite een krachtige functie is . Nog even de oplossing:
  1. Options FollowSymLinks
  2. RewriteEngine On
  3. RewriteRule ^([a-z]+)/(([a-z]+)?)$ $1.php?page=$2

links in de vorm van <a href="jepagina/subpagina"> en dat zal resulteren in ?page=jepagina&p=subpagina 
Topic kan op slot!
Offline Richard - 15/09/2006 08:25
Avatar van Richard Crew algemeen ^([a-z]+)/(([a-z]+)?)$

dit kan net zo goed dit zijn:

^([a-z]+)/([a-z]*)$
Offline Thomas - 15/09/2006 12:05
Avatar van Thomas Moderator Hmm...
RewriteRule ^([a-z]+)/(([a-z]+)?)$ $1.php?page=$2

Moet die $2 niet $3 zijn?
([a-z]+)? is namelijk het derde subpattern wat je wilt vangen?
Offline Dark_Paul - 15/09/2006 12:57
Avatar van Dark_Paul PHP ver gevorderde Hoe bedoel je dat FangorN? Dat snap ik ff niet, de eerste is toch $1 en de 2e $2, dus dan zou 't zo toch kloppen?
Nog even een ander vraagje, als ik bijvoorbeeld /admin/ heb, dan wordt de url voor php ?page=admin, maar hoe kan ik maken dat er alleen als er nog een extra waarde is (bijv /admin/beheer) dat er dan &p=beheer achter wordt gevoegd? Dus &p=.. hoeft niet altijd erachter te worden gezet.
Offline Thomas - 15/09/2006 13:33 (laatste wijziging 15/09/2006 13:34)
Avatar van Thomas Moderator Het eerste subpatroon (d.w.z. het eerste ()-paar) is $1, het tweede subpatroon (het buitenste ()-paar) is $2 - deze is in principe hetzelfde als het derde subpatroon (het binnenste ()-paar).
Het buitenste haken-paar kan in principe worden weggelaten (zoals JeXuS al voorstelde).

Citaat:
maar hoe kan ik maken dat er alleen als er nog een extra waarde is (bijv /admin/beheer) dat er dan &p=beheer achter wordt gevoegd?
Je moet matchen van de meest complexe regel naar de simpelste. De volgorde van RewriteRules is belangrijk.
Offline Rens - 15/09/2006 13:37
Avatar van Rens Gouden medaille

Crew algemeen
Even een vraagje erbij 
Je hebt de link:
http://www.site.nl/forum
Die word gematcht door:
  1. RewriteRule ^forum$ forum.php

Maar http://www.site.nl/forum/ werkt dan niet.
Moet je dan een aparte regel erbij zetten, of kun je die slash op de een of andere manier optioneel maken?
Daar zit ik nu mee te spelen, vandaar...
En het lijkt me onlogisch om daar weer een aparte regel voor te maken.
Offline Thomas - 15/09/2006 14:03
Avatar van Thomas Moderator Wordt die / er niet automatisch achter gezet?
Gebruik anders ^forum(/)?$ ofzo.
Offline Dark_Paul - 15/09/2006 15:02
Avatar van Dark_Paul PHP ver gevorderde Het is nog niet zoals ik wil. Volgens mij zit ik niet goed te zoeken. Ik wil gewoon maken, dat zodra ik naar ?page=admin ga, er ipv ?page=admin&p=blaat in de url /admin/?p=blaat oid komt te staan. Zoals 't nu is, lukt 't wel maar gaat alles fout met de mappen. Zo worden mn stylesheets niet geïnclude en omdat de images in de 'www' staan en de browser denkt dat ik in 'admin' zit gaat het niet goed. Is dit überhaupt wel mogelijk wat ik wil?
Offline Thomas - 15/09/2006 15:14
Avatar van Thomas Moderator /admin/blaat is toch veel netter/korter dan /admin/?p=blaat?

Maak hiertoe een RewriteRule die controleert of je een pagina binnen een onderdeel aanspreekt, en daarna een RewriteRule die controleert of je enkel een onderdeel selecteert:

  1. # onderdeel en pagina
  2. RewriteRule ^([a-z]+)/([a-z]+)$ index.php?onderdeel=$1&pagina=$2 [L]
  3. # alleen een onderdeel
  4. RewriteRule ^([a-z]+)$ index.php?onderdeel=$1 [L]


Je werkt dus (nogmaals) van je meest uitgebreide RewriteRule (die je als eerste controleert) terug naar de meest eenvoudige RewriteRule (die je als laatste controleert).

Het probleem met stylesheets kun je oplossen door het gebruik van een base-tag. Dit is in andere .htaccess-topics al eens voorbij gekomen.
Offline Dark_Paul - 15/09/2006 16:50
Avatar van Dark_Paul PHP ver gevorderde Okej, bedankt! 
Even kijken hoe ik dat dan ga doen, want ik krijg dadelijk met een aantal acties te maken, hoe ik die om ga schrijven. Ga ik dus even over denken, maar in ieder geval bedankt, hier kan ik nu mee vooruit !!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.217s