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?
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
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.
@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
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>
<Directory />
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
<Directory />
Options Indexes FollowSymLinks
AllowOverride All
</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.
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:
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.
Thomas - 15/09/2006 13:33 (laatste wijziging 15/09/2006 13:34)
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.
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.
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?
/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:
# onderdeel en pagina
RewriteRule ^([a-z]+)/([a-z]+)$ index.php?onderdeel=$1&pagina=$2 [L]
# alleen een onderdeel
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.
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 !!