2009-04-26 8 views
0

Ich habe ein REST-Framework, das, wenn plopped in einem beliebigen Verzeichnis sollte Just Work (TM), und es scheint gut zu funktionieren, wenn ich Projekte in Unterverzeichnissen habe, aber nicht, wenn es in root ist. Also, ein paar Beispielverzeichnisse gegeben;Apache Rewrite-Regeln redux

/ 
/project1 
/bingo/project2 
/hoopla/doopla/minor/project3 

All diese Arbeiten gut, außer ich bin „Funnies“ getting *, wenn das Projekt in dem Root-Verzeichnis ausgeführt wird (etwas schwer zu erklären, nehme ich an, aber die zweite Ebene umschreibt arbeitet nicht richtig). Hier ist mein Versuch einer generischen .htaccess-Datei:

RewriteEngine On 
RewriteRule ^static/ - [L] 
RewriteCond %{REQUEST_URI} ^$ 
RewriteRule .* ./ [R,L] 
RewriteRule ^index.php - [L] 
RewriteRule (.*) index.php?q=$1 [QSA,PT] 

(Und ja, haben alle Projekte ein Unterverzeichnis ./static, die von Neufassungen ignoriert) Was ich versuche eine Reihe von Rewrite-Regeln zu erreichen, ist, dass die Arbeit für die meisten Fälle (was wiederum das Projekt in ein Verzeichnis plüncht, das der Webserver bedient). Ich bin kein Rewrite-Regeln wiz durch eine Totale, und jeder gute Rat und gotchas würde geschätzt (und ja, ich habe durch zu viele einführende Artikel verschwunden. Ich brauche einige ernsthafte Saft.)

  • Mehr Infos zu den Funnies; Mein Webserver hat docroot an einer Stelle (unter/usr/share/apache2/default-site /), aber eine Reihe von Regeln, die besagt, dass/projects von einer anderen Stelle übernommen wird, die kein Unterverzeichnis von docroot ist (/ home/user/Projekte /). Wenn ich dorthin gehe, bekomme ich eine Liste von/projects-Unterverzeichnissen, und wenn eines dieser Unterverzeichnisse mit den vorgeschlagenen Rewrite-Regeln aufgerufen wird (restmapp), bekomme ich;

    Die angeforderte URL /home/user/Projects/restmapp/index.php wurde auf diesem Server nicht gefunden.

+1

Weitere Informationen über die 'Funnies' wäre hilfreich. –

+0

Funnies der Beschreibung hinzugefügt. – AlexanderJohannesen

Antwort

0

diese Regeln Versuchen:

RewriteRule ^static/ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .* index.php?q=$0 [L,QSA] 

bearbeiten Zusätzlich könnten Sie die R Flag verwenden eine externe Umleitung zu erzwingen oder die logging feature of mod_rewrite aktivieren, um zu sehen, wie die Anfragen neu geschrieben/intern umgeleitet .

+0

Hmm, scheint nicht zu funktionieren. Ich bekomme 404 auf index.php (aber der richtige Pfad ist angegeben), so dass es ein bisschen verwirrend ist, und ich vermute eine rekursive Sache? Entweder das oder ich habe eine andere seltsame Konfiguration in meinem Setup. Ich überprüfe das trotzdem. – AlexanderJohannesen

+0

Weitere Informationen zum Debuggen wären hilfreich. – Gumbo