2016-08-04 24 views
1

So habe ich eine htaccess-Datei in einem Unterverzeichnis und jedes Mal, wenn ich versuche, die URL neu zu schreiben, leitet es zum document_root und nicht das Unterverzeichnis, wo der htaccess residiert. Unter normalen Umständen würde ich es jetzt mit dem Pfad zum Unterverzeichnis mit path/to/subdirectory umschreiben, aber ich werde nicht wissen, wie der genaue Pfad sein wird. Gibt es auch einen Weg, durch eine Apache-Umgebungsvariable oder etwas anderes, diesen Pfad zu schreiben?.htaccess und neu schreiben von Unterverzeichnissen in unbekanntes übergeordnetes Verzeichnis

Bearbeiten: Hier ist die .htaccess Datei so weit.

RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    #RewriteRule (.*-file) a/b/c/$1.file 
    RewriteRule (.*-file) $1.file 

Also, ich versuche zu, wenn die Anfrage das Wort file enthält, möchte ich vor der Word-Datei die gesamte Anforderung entsprechen und dort umgeleitet werden. Dies ist so, dass, wenn eine Anfrage an

example.com/a/b/c/file[any characters here].file 

die Anfrage wird an die richtige Datei umgeleitet wird. Das Problem ist, dass ich versuche, innerhalb des Unterverzeichnisses umzuleiten. Wenn ich "Rewrite $ 1" sage, möchte ich, dass die gesamte Anfrage einbezogen wird und nicht nur, was im REQUEST_FILENAME übereinstimmt. Und der Grund, warum ich es brauche, ist, weil ich a/b/c/$1.file nicht einfach setzen kann, da ich den absoluten a/b/c Teil für die absolute Sicherheit nicht wissen werde.

Edit 2: Beispiele: So ist ein Beispiel, dass ich eine Anfrage wie senden würde:

example.com/a/b/c/fileacs.file 

Und will umleiten zu:

example.com/a/b/c/file.file 

Wo ich weiß nicht,/b/c /. Ich habe eine tatsächliche Regex und eine Reihe von Regeln für den realen Gebrauch dieser Umleitung, also kümmern Sie sich nicht um die lächerliche Natur dieses Beispiels.

Aber zur Zeit es Umleitung zu:

example.com/file.file 

die es nicht gibt und selbst wenn es tat, ich will dort nicht umleiten. Ich habe über Rewrite Context gelesen, kann aber nichts Wesentliches darüber herausfinden, auch wenn es der Grund dafür ist. Vielen Dank im Voraus.

+0

Können Sie Ihren .htaccess zeigen? – anubhava

+0

@anubhava Ich müsste zu Hause sein, aber ich werde sicher meinen Hauptbeitrag bearbeiten, um zu zeigen, was ich bis jetzt sicher habe. –

+0

@anubhava Ich habe den Beitrag bearbeitet, um Klarheit und Kontext hinzuzufügen. –

Antwort

2

können Sie diese Regel verwenden, einen beliebigen Pfad vor fileacs.file zu erfassen und zu verwenden, die als bach-Referenz in RewriteRule:

RewriteEngine On 

RewriteCond ^(.*)/file[^.]+\.file$ [NC] 
RewriteRule^%1/file.file [L,R=302] 
+1

Sie sind Antwort hat mich nah an meine Lösung, aber es war auch der Teil der Anfrage, die ich auslassen wollte, aber ich danke Ihnen vielmals! –

+0

Ich versuche nur den Pfad zu erfassen, den ich nicht kenne, mit meiner Regex. –

0

Die Lösung, die eine RewriteCond auf dem% {REQUEST_URI} (dank anubhava zu verwenden ist!) dass checks die gesamte Anfrage mit Ausnahme von% {REQUEST_FILENAME} abgleicht, ohne sie mit einem Lookahead zu erfassen. Schreibe dies mit dem% 1 gefolgt vom gewünschten Dateinamen aus. Siehe die folgenden:

RewriteEngine On 
    RewriteBase/
    RewriteCond %{REQUEST_URI} (.*)-file(?!\.file) [NC] 
    RewriteRule^%1.file [L,R=301] 

% 1 hält nun den Pfad zu dem Verzeichnis auf, dass die .htaccess gespeichert ist, zuzüglich Präfix an den Dateinamen. Dies stimmt nicht mit dem Rest der Anfrage überein, sondern sorgt dafür, dass Sie nicht wirklich die Datei anfordern, zu der Sie umleiten möchten (was zu einer Schleife führt).