2011-01-12 6 views
0

Ich habe einen Apache (auf ubuntu) mit einigen vhosts installiert. In den www-Verzeichnissen habe ich eine Datei (zum Beispiel) namens info.php. Und ich kann diese Datei durch /info.php AND/info öffnen (ohne die .php am Ende).gleiche Datei mit .php und ohne .php ohne irgendeinen mod_rewrite RewriteRule

Es gibt keine mod_rewrite-Regel in Vhost oder dir.

Und wenn ich versuche, eine Rewrite-Regel wie:

RewriteRule ^info$ http://www.google.com/ [R=307,L] 

und öffnen/info (ohne .php) es dosn't Arbeit.

Wenn ich ändern, um die Rolle zu

RewriteRule ^info.php$ http://www.google.com/ [R=307,L] 

und öffnen Sie die/info es funktioniert.

Und wenn ich versuche, diese Regel:

RewriteRule^(. *) $ Echo.php Wert = $ 1 [L]

und öffnen Sie eine Seite wie/foo und drucken Sie den Wert $ ich bekommen? "echo.php". Wenn ich versuche/foo/bar bekomme ich "echo.php/bar"

Hat jemand einen Tipp für mich?

Anzahl: Hier sind einige Informationen aus der phpinfo():

SCRIPT_FILENAME /var/www/test/echo.php 
QUERY_STRING value=echo.php 
REQUEST_URI  /foo 
SCRIPT_NAME  /echo.php 

Antwort

1

Sie benötigen ein RewriteCond vor Ihrer RewriteRule, die den Basisfall passt, wo kein Umschreiben auftreten sollte. Andernfalls wird Ihre umgeleitete Anforderung ebenfalls neu geschrieben.

0

Das Dollarzeichen markiert das Ende einer Zeichenkette. Sie könnten (ungetestet) verwenden:

RewriteRule ^info(.php)?$ http://www.google.com/ [R=307,L] 
0

Die Möglichkeit, Dateien zugreifen, ohne Erweiterungen schreiben von MultiViews Optionen in Apache verursacht wird. Um sie zu deaktivieren, verwenden Sie:

Options -Multiviews 

Sie können versuchen, ihn auszuschalten und sehen, ob es funktioniert oder nicht.

Alternativ für Ihre echo.php, können Sie einfach verwenden:

RewriteRule . echo.php [L] 

Und dann echo.php Scheck von REQUEST_URI haben, die den Pfad enthält, die ursprünglich angefordert wird.