2012-06-18 7 views
6

fand ich habe einen Ordnermod Rewrite-Verzeichnis, wenn Datei/Ordner nicht

www.domain.com/ "folder1" in meinem Stammverzeichnis namens www.domain.com/folder1

Ich brauche Um alle Anfragen an www.domain.com umzuleiten, die zu einem 404-Fehler werden, zu folder1. Wie so:

www.domain.com/a_file.txt

Wenn a_file.txt nicht existiert, sucht in folder1:

www.domain.com/folder1/a_file. txt

das möchte ich das gleiche für Verzeichnisse arbeiten, etwa so:

www.domain.com/a_folder (umleiten, wenn es existiert nicht in der Wurzel)

www.domain.com/folder1/a_folder

Ich weiß, ich RewriteCond% verwenden sollte {REQUEST_FILE}! -f aber ich kann nicht auf einen Reim scheinen aus.

Antwort

15
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_URI} !^/folder1/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) folder1/$1 [L,R] 
  • Der erste Rewrite-cond garantiert Sie nicht Schleife tun (falls die Datei nicht innerhalb folder1 existiert entweder
  • Die zweite, um dieses Ziel überprüft ist keine Datei
  • Die dritte - das Es ist kein Ordner
  • Und schließlich, schreiben Sie die URL L Flag bedeutet, das ist die letzte Regel angewendet (auch wenn es Regeln gibt), R bedeutet Redirect.Sie ​​können auch QSA Flag hinzufügen, wenn Sie möchten Abfrage-Zeichenfolge-Parameter rs übergeben an das Original gesendet werden, um die neue URL
+0

Genau war ich schrieb ... +1 für die Schleife vermeiden und Erklärungen. – zessx