[ModRewrite] 1 map niet meenemen in rewriterules

Pagina: 1
Acties:

  • t-x-m
  • Registratie: November 2003
  • Laatst online: 17-07 08:19

t-x-m

.NET Nerd

Topicstarter
Ik zit me er nu al zo lang op stuk te bijten dat ik het maar eens kom vragen;
Via wat rewrite-rules als deze:
code:
1
RewriteRule ^(.*)/(.*)/(.*)/$ index.php?cat=$1&page=$2&show-id=$3 [NC,L]
probeer ik mijn URL's wat toegankelijker te maken.

Nu wil ik alleen dat het mapje /beheer/ niet wordt meegenomen in de rule, nou ben ik niet zo'n ster in regular expressions en dat soort zaken dus ik kom er niet uit.

Ik heb het volgende al geprobeerd ( :X ):
code:
1
2
3
4
5
6
7
RewriteCond   %{REQUEST_URI}  !^beheer/(.*)  
^^heeft totaal geen uitwerking, zo lijkt het

--en--

RewriteRule ^([^(beheer)].*)/(.*)/(.*)/$ index.php?cat=$1&page=$2&show-id=$3 [NC,L]
^^hij past dan toe wat ik wil op alle mappen die beginnen met een van de letters in het woord beheer(bher)
en hier gekeken:
link1, link2, link3

Ik hoop dat jullie mij met dit (wellicht) eenvoudige probleem uit de brand kunnen helpen :)

[ Voor 9% gewijzigd door t-x-m op 18-04-2006 17:10 ]

GC.Collect();


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-08 12:58

NMe

Quia Ego Sic Dico.

[^(beheer)] is een character class die matcht op alles wat geen (, b, e, h, r of ) is. Wat jij wil is iets heel anders en zal inderdaad eerder met een RewriteCond moeteng gebeuren.

Daarnaast: Waar hoort mijn topic?

PRG>>SA

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 24-06 10:44

JHS

Splitting the thaum.

Zoals * JHS aangeeft heb je toch echt een RewriteCond nodig. Als je in de documentatie kijkt zie je dat %{REQUEST_URI} "The resource requested in the HTTP request line. (In the example above, this would be "/index.html".)" teruggeeft. Iniedergeval zal je dus een / moeten toevoegen na de ^. Ook kan je na de / aan het eind van beheer volgens mij alles weglaten.

code:
1
2
3
RewriteCond   %{REQUEST_URI}  !^/beheer
#of anders
RewriteCond   %{REQUEST_URI}  !^/beheer/(.*)$

Overigens kan je beheer wel negaten in de Rule zelf, met behulp van een lookbehind assertation, mits mod_rewrite dat ondersteund. Overigens zou ik eerder op ^/ matchen, dan op alle tekens inclusief slashes. Omdat mod_rewrite volgens mij ungreedy matched zal het wel goed gaan, maar ik denk dat dit netter, en iets sneller, is :) . Dan zou je zoiets krijgen:

code:
1
RewriteRule ^/([^/]*)(?<!beheer)/([^/]*)/([^/]*)/?$ index.php?cat=$1&page=$2&show-id=$3 [NC,L]

Een andere oplossing zou een RewriteRule kunnen zijn met [L] die de beheermap opvangt:

code:
1
2
RewriteRule ^/beheer/(.*)$ beheer/$1 [L]
RewriteRule ^/([^/]*)/([^/]*)/([^/]*)/?$ index.php?cat=$1&page=$2&show-id=$3

[ Voor 6% gewijzigd door JHS op 18-04-2006 17:34 ]

DM!


  • t-x-m
  • Registratie: November 2003
  • Laatst online: 17-07 08:19

t-x-m

.NET Nerd

Topicstarter
Prima JHS, het werkt met
code:
1
RewriteCond   %{REQUEST_URI}  !^/beheer/(.*)$
met wat je gaf in het 2e codeblokje kreeg ik een 500 error pagina..

Mijn dank is erg groot ;)

GC.Collect();