2017-03-20 7 views
0

Ich bin neu auf Nginx-Server.
Ich werde das PHP-Framework wie Codeigniter auf den Nginx-Server bereitstellen.
Meine Konfigurationsdatei folgt.Nginx Location Block Matching Regel

server { 
    index index.html index.php index.htm; 

    # set expiration of assets to MAX for caching 
    location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ { 
     expires max; 
     log_not_found off; 
    } 

    location/{ 
     # Check if a file exists, or route it to index.php. 
     try_files $uri $uri/ /index.php; 
    } 

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

Meine Frage folgt.
1) Der Antrag uri ist wie dieser "www.domain.com/controllername/functionname/param1/param2/"
Wie funktioniert nginx Arbeit mit dieser URL?

2) Der dritte Standort Block entspricht den regulären Ausdruck ".php $".
Ist dies nur wahr, wenn das URI mit ".php" beendet wurde?
(ich glaube so, aber die fastcgi_split_path_info Blockade verschiedenen regulären Ausdruck hat.)

Antwort

1

Frage 1) Ja, das sollte funktionieren, weil die Linie

try_files $uri $uri/ /index.php; 

eines nach der anderen für eine Anforderung behandelt wird. First nginx versucht, die vom URI beschriebene Datei zu finden. Wenn keine Übereinstimmung gefunden wird, wird überprüft, ob es sich um ein Verzeichnis handelt. Wenn nicht, ruft es Ihre index.php Datei auf. Der ursprüngliche URI wird mit einer Menge anderer HTTP_REQUEST-Variablen übergeben und der Code von codeigniter kümmert sich um das Parsing der URL, wenn Sie configure (codeigniter correct). Die Aufrufkonvention für Codeigniter ist "www.domain.com/controllername/public_function/param1/param2/" Normalerweise geben Sie nicht den Viewname, aber den Controller und den Funktionsnamen in Ihrem URI.

Frage 2) Der „Ort“ Richtlinie verwendet nur den URI-Pfad ohne GET-Parameter. Der Split_Path funktioniert anders und benötigt daher einen anderen Regexp.

+0

Bevor der Codeigniter die URI verarbeitet, verarbeitet der Nginx diesen? Ich denke schon. –

+0

Das ist richtig, aber die Art, wie Ihre Konfiguration funktioniert, ist kein Problem. –

+0

Danke, aber wenn der Codeigniter die URI empfängt, wie wird das geändert? –

Verwandte Themen