Beste mensen,
Ik ben met een website bezig. Nu loop ik tegen een probleem met mod rewrite.
Ik heb de volgende rules:
RewriteRule ^appartementen/(.*)/pagina/(.*)$ land.php?id=$1&pagina=$2
en
RewriteRule ^appartementen/(.*)/(.*)/(.*)$ plaats.php?id=$3
Nu krijg ik een error omdat het systeem niet weet welke rule er genomen moet worden. Is daar een oplossing voor?
- htaccess Mod Rewrite
-
31-08-2010, 20:17 #1
- Berichten
- 419
- Lid sinds
- 16 Jaar
htaccess Mod Rewrite
-
-
31-08-2010, 20:21 #2
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Je moet kijken welke regel het belangrijkste is. In jouw geval is dat zo te zien de 1e, daarna wordt er pas herschreven in de regel van de 2e.
Je kunt de flag [L] gebruiken, wat inhoud dat dit de laatste regel is en er niet verder gezocht moet worden, dus:
RewriteRule ^appartementen/(.*)/pagina/(.*)$ land.php?id=$1&pagina=$2 [L]
RewriteRule ^appartementen/(.*)/(.*)/(.*)$ plaats.php?id=$3 [L]
Als hij dan aan de eerste regel wordt voldaan (en er dus pagina op de 2e plek staat), zal hij de eerste regel gebruiken en daarna stoppen. Staat pagina niet op de 2e plek, dan wordt naar de volgende regel gegaan en die gebruikt, en ook hier wordt er weer gestopt.
Hier is een handig hulpmiddel:
http://phphulp.jorendewit.nl/files/mrcs_flags.png
-
31-08-2010, 20:51 #3
- Berichten
- 419
- Lid sinds
- 16 Jaar
Ik denk niet dat het kan wat ik wil. Ik heb namelijk heel veel van die rules:
RewriteRule ^appartementen/(.*)$ land.php?id=$1
RewriteRule ^appartementen/(.*)/pagina/(.*)$ land.php?id=$1&pagina=$2
RewriteRule ^appartementen/(.*)/sorteren/(.*)$ land.php?id=$1&sorteren=$2
RewriteRule ^appartementen/(.*)/sorteren/(.*)/pagina/(.*)$ land.php?id=$1&sorteren=$2&pagina=$3
RewriteRule ^appartementen/(.*)/(.*)/(.*)/(.*)$ bedrijf.php?id=$4
RewriteRule ^appartementen/(.*)/(.*)$ provincie.php?id=$2
RewriteRule ^appartementen/(.*)/(.*)/sorteren/(.*)$ provincie.php?id=$2&sorteren=$3
RewriteRule ^appartementen/(.*)/(.*)/pagina/(.*)$ provincie.php?id=$2&pagina=$3
RewriteRule ^appartementen/(.*)/(.*)/sorteren/(.*)/pagina/(.*)$ provincie.php?id=$2&sorteren=$3&pagina=$4
RewriteRule ^appartementen/(.*)/(.*)/(.*)/sorteren/(.*)/pagina/(.*)$ plaats.php?id=$3&sorteren=$4&pagina=$5
RewriteRule ^appartementen/(.*)/(.*)/(.*)/sorteren/(.*)$ plaats.php?id=$3&sorteren=$4
RewriteRule ^appartementen/(.*)/(.*)/(.*)/pagina/(.*)$ plaats.php?id=$3&pagina=$4
RewriteRule ^appartementen/(.*)/(.*)/(.*)$ plaats.php?id=$3
Maar krijg steeds errors. Is het uberhaupt mogelijk met zoveel die op elkaar lijken?
-
31-08-2010, 21:04 #4
- Berichten
- 158
- Lid sinds
- 14 Jaar
RewriteRule ^appartementen/(.*)/(.*)/(.*)/pagina/(.*)$ plaats.php?id=$3&pagina=$4
Je geeft daar dus aan slechts 3 en 4 te gebruiken, de rest van de ingevulde dingen in de URL is compleet nutteloos of hoe zo ik dat? Ik denk dat je opbouw van URL's niet geheel in orde is. Kun je eens wat voorbeelden posten, waarschijnlijk zit je in de verkeerde richting (correct me if I'm wrong).
-
31-08-2010, 21:06 #5
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Natuurlijk kan dat, maar je moet gewoon logisch gaan kijken in welke volgorde dat de regels uitgevoerd moeten worden door de rewrite_mod..
Verder is het ook gemakkelijker om .* te vervangen door de tekenreeksen die mogen:
([a-z]) voor a-z kleine letters
([A-Z]) voor A-Z grote letters
([0-9]) voor de cijfers
je kunt ook combinaties gebruiken:
([a-zA-Z0-9_-]) voor a-z klein en groot, 0 t/m 9 en de tekens - en _
In jou htaccess zal het een kwestie zijn van goed sorteren op welke regels als eerste en welke als laatste moeten komen. bijv:
RewriteRule ^appartementen/(.*)$ land.php?id=$1
Deze regel voldoet ook aan de URLs die aan de andere regels voldoen.. zo zal de url
/appartementen/1 aan deze regel voldoen, maar ook
/appartementen/1/pagina/4
Die regel moet je dus onderaan plaatsen en de flag [L] erachter plaatsen, zodat als er maar één waarde na /appartementen/ komt, dat deze regel gekozen moet worden, bij links met meer waardes na appartement zul je de rewriterules erboven moeten plaatsen.
Dan schuif je op naar de regels waarbij er 2 waardes komen, 3 waardes komen, etc. etc. uiteindelijk krijg je dan een logische opbouw waarbij enkel de goede regel gekozen gaat worden.Laatst aangepast door Joshua de Gier : 31-08-2010 om 21:23
-
31-08-2010, 21:09 #6
- Berichten
- 144
- Lid sinds
- 16 Jaar
Wow, Joshua,
Ik heb eigenlijk nooit zulke goede uitleg gehad over htaccess en maak daar ook altijd fouten in. Waarschijnlijk kan ik van deze uitleg nog eens wat leren :D
(misschien hoort dit hier niet :$)
-
31-08-2010, 21:14 #7
- Berichten
- 419
- Lid sinds
- 16 Jaar
Oei, ingewikkeld dus. Hieronder wat voorbeelden:
www.bla.nl/appartementen/Nederland
www.bla.nl/appartementen/Nederland/sorteren/prijs
www.bla.nl/appartementen/Nederland/pagina/2
www.bla.nl/appartementen/Nederland/sorteren/prijs/pagina/2
www.bla.nl/appartementen/Nederland/Limburg
www.bla.nl/appartementen/Nederland/Limburg/sorteren/prijs
www.bla.nl/appartementen/Nederland/Limburg/pagina/2
www.bla.nl/appartementen/Nederland/Limburg/sorteren/prijs/pagina/2
www.bla.nl/appartementen/Nederland/Limburg/Epen
www.bla.nl/appartementen/Nederland/Limburg/Epen/sorteren/prijs
www.bla.nl/appartementen/Nederland/Limburg/Epen/pagina/2
www.bla.nl/appartementen/Nederland/Limburg/Epen/sorteren/prijs/pagina/2
-
31-08-2010, 21:22 #8
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
Het principe wat ik tot nu toe gelezen heb is dat als je het volgende hebt:
http://www.mijnsite.nl/paginas/iets/
http://www.mijnsite.nl/paginas/test/
http://www.mijnsite.nl/paginas/test/bla/
dan voldoen al deze pagina's aan de volgende regel:
RewriteRule ^paginas/(.*)/$ index.php?p=$1
Omdat de alle 3 een waarde na paginas bevatten.
Als je dan een rewrite regel wilt maken om 'bla' te krijgen, is dit dus een uitzondering op de zojuist gemelde regel en hoort dus erboven te staan:
RewriteRule ^paginas/(.*)/(.*)/$ index.php?p=$1&id=$2 [L]
RewriteRule ^paginas/(.*)/$ index.php?p=$1 [L]
Ik heb dus zojuist verkeerd gemeld dat die regel bovenaan moest, deze moest dus onderaan(!) mijn excuses
Wat er nu gebeurd is het volgende:
Alle bovengenoemde paginas voldoen aan de 2e rewriteregel, als we die bovenaan zouden zetten, zouden alle paginas bij die regel stoppen, daarom plaatsen we boven deze regel een andere rewriterule waarin beschreven staat hoe een URL met 2 waardes moet worden doorgestuurd.
Omdat de 1e regel ook de regel is die we moeten gebruiken bij een URL met 2 waarden, voegen de de [L] flag toe, wat niet meer en niet minder betekend dat als deze regel is toegepast er gestopt mag worden, anders zou je in een oneindige loop blijven terechtkomen waarbij je van pagina naar pagina wordt doorgestuurd.
Nog iets handigs trouwens: de ^ wordt gebruikt om het begin van een regel an te geven en $ om het einde aan te geven.
-
31-08-2010, 21:33 #9
- Berichten
- 419
- Lid sinds
- 16 Jaar
Ik denk dat ik het ook maar laat doen door iemand. Ik kom er niet uit.
-
31-08-2010, 21:36 #10
- Berichten
- 1.899
- Lid sinds
- 18 Jaar
haha, het is even doorbijten. Ik wilde gisteren mijn website zo goed als afkrijgen (en vandaag ook weer), maar heb gisteren de hele dat met htaccess zitten spelen en vandaag weer met wat ajax functies die ik er eigenlijk direct in wilde.
Uiteindelijk heb je er zelf baat bij als je het door hebt!
-
31-08-2010, 21:41 #11
- Berichten
- 419
- Lid sinds
- 16 Jaar
Ja dat is inderdaad zo. Maar heb nu al zoveel mogelijkheden geprobeerd. Ik heb nu eerst alles achter pagina op [0-9] gezet omdat het altijd een getal is (paginanummer). Achter sorteren heb ik [a-z] gezet omdat het altijd kleine letters zijn (naam - prijs - random).
Ik ga nu stoppen, morgen weer verder proberen. Uitbesteden kan altijd nog. Iedergeval bedankt voor je uitleg!
-
31-08-2010, 21:53 #12
- Berichten
- 107
- Lid sinds
- 14 Jaar
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
bovenin plaatsen?
doe ik tenminste altijd!
bij mij werkt het in ieder geval
-
31-08-2010, 21:56 #13
- Berichten
- 419
- Lid sinds
- 16 Jaar
ik heb enkel het bovenste staan (rewriteEngine on) kan dat van invloed zijn?
-
31-08-2010, 22:17 #14
- Berichten
- 107
- Lid sinds
- 14 Jaar
ik zou zeggen probeer het gewoon met de hele code die ik gaf erboven, werkt dit niet kan ik altijd andere oplossing voor je zoeken
-
01-09-2010, 08:33 #15
- Berichten
- 419
- Lid sinds
- 16 Jaar
Het was even goed zoeken en puzzelen, maar het is gelukt! Bedankt voor de hulp!
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic