2016-08-08 25 views
1

Ich versuche, einige URL Rewriting mit Apache2 und PHP zu tun, das Problem ist, dass ich eine .htaccess-Datei, die rewrite_mod verwendet, hier ist sie:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ webroot/index.php [QSA,L] 

Das ^(.*)$ Muster sollte alles passen, aber es ist nicht leer Anfragen übereinstimmt, und ich weiß nicht, warum.

Um Ihnen ein Beispiel zu geben, hier ist der /root Ordner, wo die .htaccess Datei ist.

  • Anfrage /root/anything Übereinstimmungen;
  • Anfrage /root/some/thing stimmt auch überein;
  • Anforderung /root/ stimmt nicht überein.

Hier wird der /root/ Antrag soll als Muster entspricht ^(.*)$ bedeutet „alle Zeichen passen von 0 Mal in jede Höhe der Zeit“.

Weiß jemand, warum es leere Anfragen nicht entspricht?

Ich betreibe zur Zeit LAMP unter Linux Mint.

+0

Was genau entspricht dieser Ordner "Webroot" in Ihrer Substitution? –

+0

Gibt es noch andere Regeln in Ihrem htaccess? – starkeen

+1

'webroot' ist der Ordner, der' index.php' und den Inhalt der Website (Bilder, Skripte ...) enthält. Der '.htaccess' ist ** eine Ebene über ** dem' webroot'-Ordner. Also ist der Pfad zur '.htaccess' Datei'/root/.htaccess', und der Pfad zu 'index.php' ist'/root/webroot/index.php'. Und es gibt keine anderen Regeln in der '.htaccess' Datei. – TheKitsuneWithATie

Antwort

2

Haben Sie Ihre Regeln wie folgt aus:

RewriteEngine On 

# handles landing page 
RewriteRule ^/?$ webroot/index.php [L] 

# handles rest 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . webroot/index.php [L] 

mod_dir Modul, wenn läuft vor mod_rewrite und Zustand aufgrund RewriteCond %{REQUEST_FILENAME} !-f Ausführung Ihrer Regel DirectoryIndex Handler Zielseite heißt /index.php so fügt blockieren.

+0

Es funktioniert, danke für die schnelle Antwort. Gibt es eine Möglichkeit sicherzustellen, dass 'mod_dir' ** nach **' mod_rewrite' läuft, um dieses Problem zu vermeiden und eine dauerhafte Lösung zu haben? – TheKitsuneWithATie

+1

Interne Operationen von Apache wie das Laden verschiedener Module sind in der Kontrolle des Benutzers. Betrachten Sie dies als dauerhafte Lösung, da ich oben genannte Regeln auch mit vielen kommerziellen Programmen ausgeliefert habe. – anubhava

+1

Bekannt, danke! – TheKitsuneWithATie