2010-12-02 2 views
1

Ich habe ein seltsames Apache mod_rewrite Problem. Ich muss ein Unterverzeichnis vom Benutzer verstecken, aber jede Anfrage in dieses Unterverzeichnis umleiten. Bei stackoverflow habe ich mehrere ziemlich ähnliche Probleme gefunden, aber nichts passt wirklich, also habe ich mich entschieden, eine neue Frage zu stellen.Regel um Ordner zu verstecken, funktioniert nicht richtig ohne Schrägstrich

Meine .htaccess sieht wie folgt aus:

 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^(.*)?$ foo/$1 [QSA,L] 

Das Dokument-Wurzel enthält nur die folgenden Ordner/Dateien:

/foo/bar/index.html

ich jetzt, dass example.com/bar und Beispiel erwarten. com/bar/würde mir nur den Inhalt von index.html zeigen.

Statt example.com/bar/ zeige mir den Inhalt wie erwartet, aber example.com/bar leitet mich mit einem 301 zu example.com/bar/foo/ und zeigt dann den Inhalt. Ich verstehe wirklich nicht, warum es in diesem Fall eine 301-Weiterleitung gibt.

Wenn ich etwas setzen diese

 
RewriteCond %{REQUEST_URI} !^[^.]*/$ 
RewriteCond %{REQUEST_URI} !^[^.]*\.html$ 
RewriteCond %{REQUEST_URI} !^[^.]*\.php$ 
RewriteRule ^(.*)$ $1/ [QSA,L] 

oben auf dieser Regel zu arbeiten wie es scheint, aber das würde mich erfordern jede verwendete Dateierweiterung zur Liste ...

Gibt es eine andere Art und Weise i kann die Umleitung weglassen, sollte der Ordner "bar" nie von einem externen Benutzer gesehen werden.

Vielen Dank im Voraus!

Antwort

0

Besser spät als nie ...

Verstanden mit einem einfachen RewriteRule arbeiten, die a/an jede URL anhängen, die nicht auf hat.

# only directories 
RewriteCond %{REQUEST_FILENAME} !-f 
# exclude there directories 
RewriteCond %{REQUEST_URI} !^/excluded-dirs 
# exclude these extensions 
RewriteCond %{REQUEST_URI} !\.excluded-extension$ 
# exclude request that already have a/
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ /$1/ [R=301,L] 
+0

'^ (. *) /? $' Würde den abschließenden Schrägstrich optional FYI machen – zanderwar

0

Die erste Rewrite-Regel wird von/foo/(. ) zu ($ 1) und - von (.) zu $ ​​1 umgeleitet.

nur Idee, das wurde nicht getestet.