2009-03-09 8 views
3

Ich habe seltsames Verhalten mit meiner Zend Framework-Anwendung.Zend Framework: merkwürdiges URL-Rewrite-Verhalten

Ich starte diese URL, in der Hoffnung, Index-Controller die Aktion 1234567890 ausführen.

http://hello.com/index/1234567890?test=http%3A%2F%2Fworld.com%2Findex.php 

ich aber Ausnahme wie diese:

Message: Invalid controller specified (4567890) 

Und seltsam alle URLs, die jetzt auf der Seite sind verlinkt auf:

http://hello.com/index.php/index/1234567890 

Statt:

http://hello.com/index/1234567890 

Beachten Sie, dass die index.php Zeichenfolge th at bekommt falsch in URLs injiziert hat 9 Zeichen, es ist die gleiche Nummer wie bekommt der Index/123 4567890 Zeichenfolge, um den falschen Controller-Namen zu bekommen.

Eine andere Sache ist, dass injiziert index.php mit index.php im URL-codierten Parameter get von dem Beispiel korreliert.

Was ist los? Ist es ein Fehler in Zend? Oder mache ich etwas falsch?

Das ist mein .htaccess:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /index.php [NC,L] 
+0

Versuchen Sie, die Protokollierungsfunktion von mod_rewrite zu aktivieren (siehe RewriteLogLebel-Anweisung). – Gumbo

Antwort

0

MultiViews dieses Verhalten verursachen könnten. Versuchen Sie es zu deaktivieren:

Options -MultiViews 
+0

Ich änderte Optionen Alle für in meinem Projekt-Alias ​​zu Optionen Alle -MultiViews wenn das das ist, was du meintest, aber es hat nicht geholfen. Ich denke, sie waren sowieso nicht aktiviert. –

+0

Ich weiß nicht genau, ob diese Notation erlaubt ist. Versuchen Sie also, sie in zwei Deklarationen aufzuteilen. – Gumbo

+0

Haben Sie RewriteLogLevel versucht, die interne Verarbeitung zu sehen? – Gumbo

3

Du hast nicht viel setzen in der Art und Weise Sie versucht haben, zu debuggen, das so wanderte ich zu meinem eigenen localhost und gab Ihre URL ein Schuss. Und siehe da mein dasselbe tut, habe ich versucht, zwei verschiedene modrewrite Methoden:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php 

Und

RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /index.php [NC,L] 

Sie waren beide das gleiche tun. Nachdem ich einige Zeit damit verbracht habe, mit der URL zu spielen und zu sehen, wie die Request - Parameter auf meiner Fehlerseite aussehen, kann ich nur einen größeren Fehler in den Standard - Routing - Mustern im Zend Framework finden Dateiname, an den dein modrewrite Anfragen in der URL sendet.

Also habe ich meine Hauptindex.php-Datei zu main.php bzw. in meinem Modrewrite geändert und es funktioniert gut, doppelt überprüft, dass Main.php in der URL nicht durcheinander bringen würde und es nicht tut.

Also, wenn Sie nichts versprechen, wenn Sie Ihre index.php umbenennen (in die Sie Ihren Bootstrap schreiben) und in die main.php oder was auch immer Sie möchten und dies in Ihrem Modrewrite widerspiegeln, sollten Sie alles einstellen!

Viel Glück!