2011-01-07 18 views
0

Ich habe versucht, in den letzten zwei Stunden ohne Erfolg etwas zum Laufen zu bringen. Ich habe auf Google und Apache Docs nach Hilfe gesucht, aber ich kann immer noch keinen Ausweg finden. Hier ist das Ding:.htaccess RewriteCond nach dem Neuschreiben getestet

Ich habe zwei Dateien:

index.php 
public/css/screen.css 

Ich möchte, dass jede URL in den Browser eingegeben Umleitungen auf index.php url = $ 1, wenn es nicht um eine Datei handelt. Wenn dies der Fall ist, sollte es auf public/$ 1 umgeleitet werden. Ich habe versucht, die folgenden Rewrite-Regeln:

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule (.*) public/$1 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) index.php?url=$1 [QSA,L] 

Leider, da nur die Rewrite geschieht nach RewriteCond erfüllt ist, die ersten beiden RewriteCond gegen css/screen.css testen statt public/css/screen.css.

Gibt es eine magische Flagge, die Apache die RewriteRule sagt, testen, ob die RewriteConds wahr sind und dann die Neuschreibung rückgängig machen, wenn nicht? Wie würdest du das machen?

Dank

Antwort

0

Die RewriteRule verglichen ersten, aber keine Substitution stattfindet, wenn alle Bedingungen auch passen - Sie dies nicht direkt beeinflussen können.

Da REQUEST_FILENAME in .htaccess ist, was der Server bereits die URL zugeordnet, sollten Sie tun, zB: (. ​​*)

RewriteCond% {DOCUMENT_ROOT}/public/1 $ -f RewriteRule public/$ 1 [L]

wo $ 1 ist der „übrig gebliebenen“ Teil das, was ursprünglich

angefordert

Sie auch eine richtige RewriteBase benötigen, da Sie zu einer relativen URL neu schreiben.

Verwandte Themen