2011-01-06 15 views
1

Ich habe die folgende Verzeichnisstruktur in htdocs:Apache .htaccess RewriteCond auf Verzeichnis

htdocs/ 
    .htaccess 
    index.php 
    foo/ 
    bar/ 
    priv/ 

Ich versuche, saubere URLs zu erreichen, und im Grunde alles, was durch index.php geleitet werden soll. Meine .htaccess Datei ist wie folgt:

Options +FollowSymLinks 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f # <- referring to this next 
RewriteRule .* index.php [L] 

Das funktioniert gut in dem Sinne, dass ich innerhalb von foo/ und bar/ legitime Dateien direkt, ich bin jedoch zugreifen kann auch in der Lage den Zugriff auf Dateien in priv/ das ist, was ich will verbieten. Wie ändere ich die oben referenzierte Zeile, um grundsätzlich zu sagen: "Deaktivieren für Dateien, die nicht in priv/ sind"?


EDIT: Ich versuche zu tun „priv/.htaccess“ zu vermeiden, dass -> „deny from all“, und stattdessen möchte dies wie jede andere „ziemlich url“ Umwandlung in index.php verarbeiten.

+0

hi, ich würde eine zusätzliche .htaccess in priv leugnen alle Zugriffe hinzufügen. –

Antwort

6

Sie einen anderen RewriteCond mit der Bedingung hinzufügen können nur ^priv/ passen und kombinieren es mit OR:

RewriteCond $0 ^priv/ [OR] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php [L] 

Nun ist diese Regel angewendet wird, wenn entweder der angepassten Teilpfad beginnt mit priv/oder wenn das Ersuchen nicht auf eine vorhandene Datei abgebildet werden.

+1

Danke, das ist perfekt. Ich wünschte wirklich, die Apache-Dokumentation wäre leichter darin zu finden. – k4rhlx

+0

@Gumbo, Wenn es dir nichts ausmacht, dass ich wieder so ein altes Profil aufsetze, würdest du ein wenig auf die "$ 0" für den ersten RewriteCond eingehen. Sollte "$" nicht nur mit RewriteRule verwendet werden? – Matte

+0

@Matte Die '$ 0' bezieht sich auf die übereinstimmende Zeichenkette des gesamten Musters der entsprechenden 'RewriteRule'. – Gumbo