2016-06-07 16 views
2

ich meine eigene MVC habe, die eine Reihe von Anwendungen mit dieser Ordnerstruktur beherbergt:NGINX Downloads PHP-Datei

  • Hauptprojekt
    • Index.php
    • Modell (Verzeichnis)
    • anzeigen (Verzeichnis)
    • Controller (Verzeichnis)
    • Unterprojekt 1 (Verzeichnis)
      • Index.php
      • Modell (Verzeichnis)
      • anzeigen (Verzeichnis)
      • Controller (Verzeichnis)
    • Sub Projekt 2 (Verzeichnis)
      • Index.php
      • Modell (Verzeichnis)
      • Ansicht (d irectory)
      • Controller (Verzeichnis)

alles funktioniert mit Apache in Ordnung. Ich möchte es mit Nginx versuchen, aber wenn ich darauf in meinem Browser zugreife, lädt es die index.php herunter, es führt es nicht aus.

Das ist mein Setup auf nginx:

location/{ 
      # First attempt to serve request as file, then 
      # as directory, then fall back to displaying a 404. 
      # try_files $uri $uri/ =404; 
      if (!-e $request_filename){ rewrite ^(.*)$ /index.php?rt=$1 break; } 
      try_files $uri $uri/ /index.php$is_args$args; 
    } 

    location ~ .php$ { 
     try_files $uri /index.php =404; 
     fastcgi_split_path_info ^(.+\.php)(/.+)$; 
     fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
    } 

Antwort

0

Die beiden Linien:

if (!-e $request_filename){ rewrite ^(.*)$ /index.php?rt=$1 break; } 
try_files $uri $uri/ /index.php$is_args$args; 

versuchen, die gleiche Funktion auszuführen. Wenn eine Datei nicht existiert, versuchen Sie /index.php.

Die erste Linie wegen der break versagt, die /index.php im location / Block zu verarbeiten versucht, statt der location ~ \.php$ Block.

Um die erste Zeile zu korrigieren, sollte last statt break verwendet werden. Details finden Sie unter this document. Wenn Sie die try_files Zeile einschließen, benötigen Sie die if ... rewrite Anweisung nicht. Im Folgenden führt eine ähnliche Funktion:

try_files $uri $uri/ /index.php?rt=$uri&$args; 

Ich ziehe den try_files Ansatz, aber entweder sollte funktionieren, aber Sie beide nicht benötigen. try_files ist documented here. Hinweis this caution zur Verwendung des if Blocks.

Beachten Sie auch, einige Probleme mit Ihrem location ~ \.php$ Block:

  • Sie ein Backslash in Ihre Regex fehlt
  • die try_files Richtlinie mit einer URI oder eine = 404 enden soll - beide nicht
+0

Danke für das Löschen dieser Informationen über Pause und zuletzt. Ich habe versucht, .htaccess-Datei zum Neuschreiben von Nginx zu schreiben. Letztes Problem ist, wenn ich diese URL aufrufen. http://xxx.xxx.xxx.xxx/mainproject/ index.php feuert es korrekt umgeleitet zu meinem Login http://xxx.xxx.xxx.xxx/mainproject/login/ aber die Antwort ist Interner Server Fehler, tut es nicht Holen Sie index.php des Hauptprojekts, das die entsprechenden Controller aufrufen sollte. –

+0

Interner Serverfehler bedeutet, dass Sie sich die Logdateien ansehen. Wenn du wieder feststeckst, poste eine neue Frage. Glückliches Debugging! –