2008-10-08 6 views

Antwort

6

Ich würde es so machen. Wenn die Datei nicht existiert, versuchen Sie es mit .php.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ $1.php [QSA,L] 
+0

Das mache ich jetzt. Perfekt. Vielen Dank! – dreeves

+0

Also sagt dies, dass es die RewriteRule ausführen wird, wenn die zugegriffene Ressource keine Datei oder ein Verzeichnis ist? – bafromca

0

Etwas ...

RewriteRule /something/(.+)?(.+) /something/$1.php?$2 

würde wahrscheinlich funktionieren.

+0

Das scheint nicht zu funktionieren. – dreeves

+0

Wahrscheinlich müssen Sie das Fragezeichen mit einem umgekehrten Schrägstrich entkommen –

+0

Ich habe das versucht. Ich denke, dass das Abfrage-String-Zeug nur nicht Teil dessen ist, was in einer RewriteRule übereinstimmt. Sie müssen einen separaten RewriteCond für die Abfragezeichenfolge erstellen. Siehe meine Antwort. – dreeves

1

Dies funktioniert:

RewriteCond %{QUERY_STRING} ^.+$ 
RewriteRule ^/?([^/\.]+)$ /$1.php [L] 

Die Idee, um sicherzustellen, ist es ein Abfrage-String (Fragezeichen und Sachen) und wenn ja, ob der Stoff vor dem Fragezeichen keine Erweiterung hat, und wenn ja, zu ergänzen. php.

1

Wenn Sie die httpd.conf ändern können und was können Sie auch setzen:

ForceType application/x-httpd-php 

in der Datei, da es alle Pfade genannt zwingen PHP-Dateien zu sein. Ich denke, das funktioniert auch mit Query-Strings.

0

Spiele nur Pfade ohne Erweiterung:

RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php 

Edit: In meinen Tests, wird der Query-String automatisch weitergegeben. Wenn nicht, können Sie stattdessen Folgendes verwenden:

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^(([^/]+/+)*[^\.]+)$ $1.php?%1 
+0

'[QSA, L]' übergibt Abfragezeichenfolge ('L 'bedeutet, dass keine Regeln nach dieser Anweisung verarbeitet werden). – NateS

Verwandte Themen