[php] .htaccess directory en subdirectory redirecten

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 10:15
Momenteel heb ik het volgende .htaccess bestand:
code:
1
2
3
4
5
6
7
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php? [NC]

</IfModule>


Dit bestand zorgt ervoor dat alle verkeer van niet bestaande pagina's naar mijn index.php gestuurd word, waarna ik met php alles af kan handelen. In het index.php bestand lees ik de opgevraagde URL uit, en kijkt mijn script daarna welke informatie er getoond moet worden.

Echter zijn er enkele uitzonderingen. Als er een bestaand bestand opgevraagd wordt, moet dit uitgevoerd worden ipv. het index.php bestand

Vb. als het bestand in www.limusic.nl/temp/index.php zou bestaan, wordt dit bestand uitgevoerd en hoeft er niks gewrewrite te worden.

Dit stuk werkt. Alleen liep ik vandaag tegen een probleem aan. Als er in een directorie geen index.php bestand staat, wordt de inhoudt van die directorie getoond als een lijst. Zie : http://www.limusic.nl/temp/
Hoe zorg ik ervoor dat dit verkeer ook naar index.php gestuurd wordt?


Ik heb vanmiddag de hele middag gezocht hoe ik dit op kan lossen. Alleen kan ik nergens vinden hoe htaccess precies werkt en wat alle alle $ ! ^ tekens precies betekenen. Heeft iemand een link waar dat netjes uitgelegd wordt? Enige wat ik kon vinden waren heel veel voorbeelden hoe iets te doen.

Lost In Music


Acties:
  • 0 Henk 'm!

  • fleppuhstein
  • Registratie: Januari 2002
  • Laatst online: 07-09 13:37
op de site van apache kan je alles er over terug vinden: http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Je gebruikt nu -f en -d om te kijken of de url een bestaande directory of file is. Wat je éigenlijk wilt is kijken of de url bestaat. Dat kan met -U, zoals je kan zien in de docs :).

Dan houd je waarschijnlijk nog dat een directoryIndex ook een geldige URL is, maar dan zet je in je .htaccess Options -Indexes en is dat probleem ook de wereld uit.

Die twee dingen samen zouden moeten werken, maar:
'-U' (is existing URL via subrequest)
Checks if TestString is a valid URL and accessible via all the server's currently-configured access controls for that path. This uses an internal subrequest to determine the check, so use it with care because it decreases your server's performance!
Eigenlijk ga je dus bij elke request nog een subrequest doen, om te kijken of de request wel bestaat. Dat is nogal loos. Vooral omdat het dus extra rekenkracht kost, bij élke request en niet alleen de niet bestaande.

Veel handiger is natuurlijk om 404 errors te redirecten naar je index.php, en er dan iets mee te doen. Dan heb je alleen die extra rekenkracht nodig bij een url die daadwerkelijk niet bestaat ;)

Acties:
  • 0 Henk 'm!

  • Sgrovert
  • Registratie: Mei 2004
  • Laatst online: 10:15
eamelink schreef op dinsdag 14 augustus 2007 @ 19:33:
Je gebruikt nu -f en -d om te kijken of de url een bestaande directory of file is. Wat je éigenlijk wilt is kijken of de url bestaat. Dat kan met -U, zoals je kan zien in de docs :).
Helaas werkt -U ook niet. Als ik deze optie gebruik, kan hij opeens geen afbeeldingen meer vinden, en werkt de stylesheet ook niet meer :'(
Dan houd je waarschijnlijk nog dat een directoryIndex ook een geldige URL is, maar dan zet je in je .htaccess Options -Indexes en is dat probleem ook de wereld uit.
Ook deze optie krijg ik niet aan de praat. Op het moment dat ik ergens in het .htaccess bestand Options Indexes zet, krijg ik een error 500 Internal Server error.

Lost In Music


Acties:
  • 0 Henk 'm!

Verwijderd

Als jij nou even uitlegt waarom je die regel met -d daar hebt staan...

[ Voor 7% gewijzigd door Verwijderd op 14-08-2007 20:37 ]


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Sgrovert schreef op dinsdag 14 augustus 2007 @ 20:21:
Helaas werkt -U ook niet. Als ik deze optie gebruik, kan hij opeens geen afbeeldingen meer vinden, en werkt de stylesheet ook niet meer :'(
Ik weet niet zeker of je daar ook REQUEST_FILENAME bij moet gebruiken, of een andere variabele. Dat zou je even op kunnen zoeken in de docs. Of zoek een voorbeeld waar -U gebruikt wordt ;)
Ook deze optie krijg ik niet aan de praat. Op het moment dat ik ergens in het .htaccess bestand Options Indexes zet, krijg ik een error 500 Internal Server error.
Dan kan je in je apache logfile zien waarom je die error krijgt :). Waarschijnlijk is het op die plek niet toegestaan om die optie te veranderen; dan moet je je apache2.conf even aanpassen, of als je ergens anders host even je hoster een schop geven ;).
Verwijderd schreef op dinsdag 14 augustus 2007 @ 20:36:
Als jij nou even uitlegt waarom je die regel met -d daar hebt staan...
Dat is niet zo vreemd, je wilt natuurlijk dat een url ook matcht op een directory als je daar een file in hebt staan die als DirectoryIndex fungeert, zoals een index.html of index.php ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Nou, ik vat het probleem niet zo.

Niet-bestaande URL's moeten worden herschreven naar die index.php.
Maar de wel-bestaande URL naar een directory moet ook worden herschreven naar die index.php.

Dan lijkt het mij dat het wel duidelijk is dat je voor die 2e situatie de boel moet omdraaien:
code:
1
2
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ index.php? [NC]

Het wordt natuurlijk wel weer lastig als een directory waarin wél een index.php staat daar niet aan mee mag werken. Maar dat wordt het ook met jouw Options -Indexes oplossing. Tenzij je dan weer Options +Indexes doet in alle directories waarin je wel weer de autoindex wilt gebruiken.

[edit]
Ik geloof dat ik beter even iets anders kan gaan doen nu, volgens mij lul ik gruwelijk uit mij nek |:(

[ Voor 8% gewijzigd door Verwijderd op 14-08-2007 20:54 ]

Pagina: 1