Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

.htaccess hulp nodig

Pagina: 1
Acties:

Verwijderd

Topicstarter
Op de een of andere manier krijg ik htaccess niet onder de knie.

Een website van me bestaat uit 4 php files:
index.php
basisschool.php
plaats.php
school.php

Hieronder een voorbeeld van de url structuur:

www.domain.com (index.php)
www.domain.com/basisscholen/
www.domain.com/basisscholen/plaats/c/ ( alle letters van alfabet)
www.domain.com/basisscholen/plaats/c/city/ (alle mogelijke plaatsnamen)
www.domain.com/basisscholen/plaats/c/city/school/ (allerlei mogelijke schoolnamen)

url en variables in php files:

"/basisscholen/" (harde menu link naar basisscholen.php)
'.$siteurl.'/'.$type.'/plaats/'.$letter.'/'.$link.'/ (van basisschool.php naar plaats.php)
'.$siteurl.'/'.$type.'/plaats/'.$letter.'/'.$plaatsnaam.'/'.$schoolnaam.' (van plaats.php naar school.php)

.htacces file:

RewriteEngine On
RewriteRule ^\.html$ /index.php
RewriteCond %1 !^www$


RewriteRule ^basisscholen/$ basisscholen.php?id=basisscholen
RewriteRule ^basisscholen/plaats/([A-Za-z0-9-]+)/?$ basisscholen.php?letter=$1
RewriteRule ^([^/].*)/plaats/([^/].*)/([^/].*)/?$ plaats.php?type=$1&letter=$2&link=$3
RewriteRule ^([A-Za-z0-9-]+)/?$ school.php?schoolnaam=$1&plaatsnaam=$2


Nu krijg ik op de laatste pagina wel de schoolnaam via php_Get, maar niet de plaatsnaam.

Kan iemand me de htaccess schrijven zoals het hoort en me daarnaast uitleg geven van waarom ??

Alvast bedankt.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:23

Creepy

Tactical Espionage Splatterer

Dit is op deze manier een plat scriptrequest. We willen je hier best helpen maar direct vragen om een ander het werk maar voor je te laten doen is hier niet de bedoeling.

Wat me ook niet helemaal duidelijk is, is je probleem. Leg eens rustig uit wat er nu wel werkt, en wat er nu niet werkt. Geef dan ook aan wat je zelf al hebt geprobeerd om dat wat niet werkt, toch te laten werken.

Wat me opvalt is dat je laatste rewriterule maar 1 groep heeft, en geen 2, terwijl je wel $2 gebruikt. Alles wat tussen haakjes staat is 1 groep.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Krijg dus slechts 1 variabele opgehaald met php_GET op de laatste pagina via de laatste rewrite rule.

Heb hem al gekopieerd vanaf regel 3, en net zoals regel 3 neergezet met de 4e variabele erbij, ook dat helpt niet.
Die laatste regel heb ik dus wel met meerdere groepen gehad, net als regel 3

Zo dus:
RewriteRule ^([^/].*)/plaats/([^/].*)/([^/].*)/([^/].*)/?$ plaats.php?type=$1&letter=$2&link=$3&schoolnaam=$4

Of ik kreeg niets >> white page of ik kreeg hooguit de $schoolnaam en verder geen variabelen.


Omdat ik na 2 dagen proberen het niet meer snap vraag ik dus om hulp, liefst met uitleg, zodat ik kan leren waarom....


Omdat het op de laatste pagina niet werkt, snap ik dat al in mijn eerdere rules fouten inzitten waardoor het niet werkt, echter ik zie het / begrijp het niet..

:)

[ Voor 31% gewijzigd door Verwijderd op 22-09-2013 15:22 ]


  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik raad je aan om alles te rewriten naar index.php en daar te bepalen wat je gaat inladen. Sterker nog... Ik zou eens kijken naar n microframework als Silex, Slim of Flight. Die neemt al zulke pijn voor je weg.

Verwijderd

Topicstarter
Heb de site opgezocht en ga dat lezen....

  • nightwing
  • Registratie: Maart 2002
  • Laatst online: 22-11 22:24
Je kan alles naar PHP rewriten en daar intern afhandelen, dat is misschien makkelijker maar is wel duurder in cpu clock cycles. Het afhandelen in apache is efficienter, echter als als clock cycles geen issue voor je zijn , rewrite het dan volledig naar PHP.

Gezien toch mensen hier misschien op gaan komen die iets willen leren van htaccess en rewriterules ga ik daar op verder.

Disclaimer : dit is volledig even uit m'n kop, geen garantie of ie 100% correct is.

Je wil graag in elke RewriteRule de flag 'NC' meegeven die ervoor zorgt dat er niet naar upper of lower case wordt gekeken. Verder als je niet wil dat opvolgende RewriteRules nog aan je aanpassingen gaan zitten moet je de flag 'L' meegeven dat staat voor Last.

Elke (<regex>) staat voor een variable die op volgorde komen, dus 1e (<regex>) is $1, 2e is $2 enz.
De regex's die ik heb gebruikt zijn niet de meest veilige, als je die wel wil hebben dan moet je daar zelf even in duiken. regex zoals [A-Za-z0-9\'_- ] zal ook werken bij plaatsnamen, let daar wel op dat sommige plaatsen een ' en/of spatie hebben zoals 's Hertogenbosch. .* vangt alles op tot de eerste hit van hetvolgende deel. dus /(.*)/(.*)/ werkt op /alles/alles/ maar niet op /alles/alles/nogiets/ en pakt daar alleen de 1e en 2e 'alles' maar niet de 3e 'nogiets'.
De ^ geeft begin van de regel aan (regel is alles na de http://www.domein.nl/ ) en $ geeft einde van de regel aan en dat er niets meer achter mag komen.

Onderstaande voorbeeldje zou moeten werken (lees eerst de disclaimer nog eens).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
RewriteEngine On
# Rule 1
RewriteRule ^\.html$ /index.php [NC]

# Rule 2 : "/basisscholen/" (harde menu link naar basisscholen.php)
RewriteRule ^basisscholen/$                 basisscholen.php?id=basisscholen    [NC,L]

# Rule 3
RewriteRule ^basisscholen/plaats/([A-Za-z0-9-]+)/?$     basisscholen.php?letter=$1      [NC,L]

# Rule 4 : $type.'/plaats/'.$letter.'/'.$link.'/ (van basisschool.php naar plaats.php)
RewriteRule ^(.*)/plaats/(.*)/(.*)/$            plaats.php?type=$1&letter=$2&link=$3    [NC,L]

# Rule 5 : $type.'/plaats/'.$letter.'/'.$plaatsnaam.'/'.$schoolnaam.' (van plaats.php naar school.php)
RewriteRule ^(.*)/plaats/(.*)/(.*)/(.*)         school.php?schoolnaam=$4&plaatsnaam=$3  [NC,L]

  • Cartman!
  • Registratie: April 2000
  • Niet online
Als performance belangrijk is moet je geen .htaccess gebruiken maar de config in je apache config plaatsen. De meeste sites gaan echt geen nadelige performance hebben vanwege het gebruik van parsing in php dus zou het zo makkelijk mogelijk houden.
Pagina: 1