[Apache/.htaccess/PHP] gelijke namen directory en bestand

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
Hallo,

De titel is al vrij veelzeggend. Ik heb een map "artikel/onderwerp" en een bestand "artikel/onderwerp.html". Ik heb deze RewriteRule in .htaccess:
code:
1
RewriteRule ^artikel/([a-z0-9_-]+)$ index.php?folder=artikel&page=$1


Ik heb ook nog wat PHP, voor de duidelijkheid:
PHP:
1
2
3
if(isset($_GET['folder']) && isset($_GET['page'])) {
    include $_GET['folder'].'/'.$_GET['page'].'.html';
}


Als ik nu als url "artikel/onderwerp" geef, wil ik dat "artikel/onderwerp.html" ge-include wordt (i.p.v. dat ik de directory-inhoud te van "artikel/onderwerp/" te zien krijg). Is dit mogelijk? Ik heb wel het een en ander geprobeerd met RewriteCond en Options, maar kan dit probleem nergens (Google/GoT) vinden.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

code:
1
RewriteCond %{REQUEST_FILENAME} !-d


Oftewel, rewrite alleen als aan deze conditie wordt voldaan, welke zegt dat het geen bestaande directory mag zijn.

Meestal gebruik je bij mod_rewrite deze drie:

code:
1
2
3
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l


Die er dus voor zorgen dat je rewrite rules alleen worden uitgevoerd als er geen directory/file/symbolic link is gevonden met die naam. Zodat je ook nog gewoon je bestandssysteem kunt blijven gebruiken.

Zelf gebruik ik meestal een hele algemene rule, omdat ik te lui ben losse rules aan te maken (en je kunt hiermee dynamisch hetzelfde bereiken).

code:
1
2
3
4
5
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?load=$1 [QSA]

[ Voor 132% gewijzigd door Bosmonster op 09-03-2006 14:10 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
Die oplossing was ik al tegengekomen, maar dan zie ik toch nog steeds de inhoud van die map.

Overigens wordt er wel deze url van gemaakt:
code:
1
http://domein.com/artikel/onderwerp?folder=artikel&page=onderwerp


Ik dacht; dan moet ik die [L] flag gebruiken, want ik heb eigenlijk deze .htaccess
code:
1
2
RewriteRule ^artikel/([a-z0-9_-]+)$ index.php?folder=artikel&page=$1
RewriteRule ^artikel/([a-z0-9_-]+)/([a-z0-9_-]+)$ index.php?folder=artikel&page=$1&subpage=$2

Maar dat is het dus ook niet (evenals - uiteraard - het omdraaien van deze rules)...

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Vooralsnog lijkt dit me eerder een configuratieprobleem dan een programmeerprobleem, en daarom verplaats ik dit topic even naar het nieuwe Development Tools & Environments. :)

PRG>>DTE

'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.


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
offtopic:
Thanks, ik deed een search op ".htaccess" gesorteerd op datum en keek toen in welk forum de meeste topics stonden; vandaar. Vast een hels karwei om nu zo veel mogelijk topics naar het juiste forum te verplaatsen...

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
*kick*

Ik zou het toch wel leuk vinden als het mogelijk is wat ik wil.

Wat de reply van Bosmonster betreft:
Die er dus voor zorgen dat je rewrite rules alleen worden uitgevoerd als er geen directory/file/symbolic link is gevonden met die naam.
Die rewrite rule moet toch juist - ondanks dat er ook een directory met die naam bestaat - toch uitgevoerd worden op die file. Of begrijp ik het nu verkeerd? Anyway, die oplossing lijkt voor mij niet te werken.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Ik snap het probleem dan even niet meer. Zelfs even getest voor je, maar bij mij doet ie gewoon wat ie moet doen :)

edit:
Of heb je ook weer een mappen in die artikel map?

Een simpele oplossing zou natuurlijk zijn je mappen-structuur wat minder conflicterend op te zetten.

Het nut van mod_rewrite ontgaat me ook een beetje als je toch exact dezelfde mappenstructuur ernaast op gaat zetten. mod_rewrite is juist handig om dat te voorkomen.

[ Voor 66% gewijzigd door Bosmonster op 13-03-2006 10:38 ]


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
code:
1
2
3
4
artikel/foo.html
artikel/bar.html
artikel/foo/foosubartikel1.html
artikel/foo/foosubartikel2.html

Als ik nu "artikel/foo" benader, wil ik dat de rewriterule daar "index.php?folder=artikel&page=foo" van maakt en PHP dus artikel/foo.html gaat includen. Maar ik krijg de inhoud van artikel/foo/ te zien (wat op zich normaal gedrag is). Ik denk ook wel dat jij me snapt eigenlijk, vreemd dat het hier niet goed gaat.

Wat je edit betreft:
Ja, ik heb dus ook mappen in de artikel-map. Maar ik begin nu zelf ook in te zien dat het zo weinig zin heeft. De enige reden dat ik mod_rewrite gebruik is eigenlijk dat ik die .html er niet meer achter wil in de url. Achteraf gezien dan. O+ Maar dat zoek ik zo wel even op. Bedankt voor de moeite :)

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Topicstarter
Eh.. hoe kan ik achter elke url ".html" plakken?

Dus achter zowel "foo" als "bar/foo" (moet resp. "foo.html" en "bar/foo.html" worden).

Zoiets werkt niet echt:
code:
1
RewriteRule ^(.*)$ $1.html
Pagina: 1