[Apache] mod_rewrite alleen als locatie niet bestaat

Pagina: 1
Acties:

  • Andre-85
  • Registratie: April 2003
  • Niet online
Voor een website die ik aan het opzetten ben wil ik gebruik maken van nette URLs. Multiviews of Mod_rewrite gebruiken zoals hier beschreven is, zul je zeggen. Ik wil het alleen net een beetje anders hebben...

Ik wil graag dat index.php via $_SERVER['REQUEST_URI'] de navigatie afhandeld, maar ik wil geen 'index' in mijn url hebben. www.domein.tld/nieuws/123 ipv www.domein.tld/index/nieuws/123. Maar als de locatie www.domein.tld/blaat bestaat, moet er niks herschreven worden natuurlijk.

Ik weet op het moment nog niet eens of hetgeen ik wil mogelijk is, laat staan dat ik een idee heb hoe ik het moet aanpakken. Zoekacties leveren genoeg manieren op om nette urls te maken maar niet op de manier zoals ik hierboven beschreven heb.

Ik hoop dat jullie me wat wijzer kunnen maken ;)

[ Voor 3% gewijzigd door Andre-85 op 17-11-2005 17:12 . Reden: kleine verduidelijking ]

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


  • Andre-85
  • Registratie: April 2003
  • Niet online
* Andre-85 geeft het topic een zetje...

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


  • Koetjeboe
  • Registratie: Maart 2002
  • Laatst online: 21-08 14:29

Koetjeboe

Boe, zegt de koe

code:
1
2
3
4
5
6
    # bestaat het?
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # zo nee, rewriten maar
    RewriteRule ^(.*)$      index.php?meuk=$1 [L,QSA]


Kun je dat niet gewoon gebruiken? zo komt allemeuk achter domein.tld/ in je $_GET['meuk'] te staan en kun je daar je kunsten mee uitvoeren...

De bezoeker ziet dan niks kwa index.php, lijkt me wat je wilt?

En desnoods zet je dit er nog boven?
code:
1
RewriteRule ^index.php              404.html [L,QSA]

[ Voor 13% gewijzigd door Koetjeboe op 20-11-2005 16:17 ]

Ohhi - Familie foto's delen via een europees prive sociaal netwerk


  • Andre-85
  • Registratie: April 2003
  • Niet online
Koetjeboe jouw aanpak lijkt me een perfecte oplossing. Ik krijg het alleen nog niet geimplementeerd.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
NameVirtualHost *:80
<VirtualHost *:80>

RewriteEngine On

# bestaat het?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# zo nee, rewriten maar
RewriteRule ^(.*)$        index.php?meuk=$1 [L,QSA]

ServerName scms.kwakernaak.local
DocumentRoot /home/apollux/public_html/testcms/sCMS

</VirtualHost>

Ik heb de rewrite rules aan mijn virutual host toegevoegd. Maar nu krijg ik altijd een 400 Bad Request header terug.

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


  • Andre-85
  • Registratie: April 2003
  • Niet online
* Andre-85 schopt nog een keer...
Het is me nog niet gelukt om de Rewrite rule aan de praat te krijgen. Wie kan me verder helpen?

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


  • Roelant
  • Registratie: Januari 2001
  • Niet online
Hmm, volgens mij denk je veel te moeilijk door het via "niet gevonden" te willen afhandelen. Als je vrij gericht weet wat je wil bereiken, dus in dit geval een URL '/nieuws/$nieuws_id', kun je dat zowel via multiviews als mod_rewrite bereiken. Sec naar mod_rewrite gekeken zijn er twee mogelijkheden:

1 algemene rewriterule in de .htaccess in de webroot

Ik gebruik zelf vaak 1 standaard rewrite rule die ook direct de mogelijkheid tot meerdere pagina's ondersteunt.
code:
1
RewriteRule ^(nieuws|review|about)(/([0-9]+))?$ index.php?action=$1&page=$3

Bovenstaande voorbeeld vangt bijv. alle URL's af die voldoen aan

domein.nl/nieuws/1
domein.nl/review/1
domein.nl/about/1

Maar biedt tevens ondersteuning aan iets met meerdere pagina's, zoals bij Tweakers.net bijv. de reviews:

domein.nl/review/1/2
(pagina 2 van review 1, volgens bovenstaande rewriterule)

2 specifieke rewriterule in .htaccess in de dir 'nieuws'

Als je echt alleen "nieuws" wil afvangen, kun je natuurlijk ook een mapje "nieuws" maken in je webroot, daarin de benodigde index.php en een rewriterule die alles daarnaar doorstuurt:
code:
1
RewriteRule ^([0-9]+)   index.php?id=$1

Ik denk dat dit is wat je zoekt?

Meer info is hier.

[ Voor 5% gewijzigd door Roelant op 22-11-2005 13:49 ]


  • Andre-85
  • Registratie: April 2003
  • Niet online
Roelant bedankt voor je uitleg. Het is me gelukt ;)

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Ik gebruik wel zoiets als Koetjeboe suggereert, vind dat toch netter.

Rustacean

Pagina: 1