Heim  >  Artikel  >  Backend-Entwicklung  >  Eingehende Analyse der PHP-Framework-Routing-Implementierung unter Nginx

Eingehende Analyse der PHP-Framework-Routing-Implementierung unter Nginx

angryTom
angryTomnach vorne
2019-10-14 10:59:522673Durchsuche

Wenn alle Frameworks Geschäftsanfragen verarbeiten, verarbeiten sie den Pfadteil der URL und weisen ihn dem angegebenen Code zur Verarbeitung zu.
Der Schlüssel zur Realisierung dieser Funktion besteht darin, die Daten des URL-Teils in der globalen Variablen $_SERVER abzurufen

Wenn der angeforderte Pfad
http://test.com/article ist ?id= 1
http://test.com/article/update?id=1

Unterstützt den oben genannten URL-Modus, es ist nicht erforderlich, die übergebene PATH_INFO-Variable zu konfigurieren , und es besteht keine Notwendigkeit, den pseudostatischen Entfernungsindex.php zu konfigurieren
Die einfachste Nginx-Konfiguration ist wie folgt:

server {
        listen 80; 
        server_name  test.com;
        access_log  /var/log/nginx/test.com.access.log  main;
        root   /home/test;
        index  index.html index.htm index.php;
        location / { 
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }   
        location ~ \.php {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }   
}

Es gibt mehrere wichtige Punkte, die beachtet werden müssen in dieser Konfiguration:

1.try_files muss im Standortblock konfiguriert werden. Dies kann zum Entfernen von index.php verwendet werden. Wenn nicht konfiguriert, müssen Sie /index.php/ hinzufügen.
2.location ~ .php
a. Manchmal stört es Sie, ob es mit $ endet. Der entscheidende Punkt ist, zu überprüfen, ob die try_files-Direktive nicht existiert $. Auf diese Weise kann weiterhin darauf zugegriffen werden, indem der Modus mit /index.php/ im Pfad verwendet wird
b Wenn es eine try_files-Direktive gibt und der Speicherort ~ .php$ hier mit $ endet, dann /. index.php/ kann nicht mit dem Speicherort von php übereinstimmen, aber try_files schreibt die Parameter in index.php?q= won um, sodass auch auf diese Weise darauf zugegriffen werden kann.

Zu diesem Zeitpunkt lauten in der Variablen $_SERVER die Variablenwerte, die häufig von großen Frameworks oder selbst geschriebenen Programmen für die Routing-Verarbeitung verwendet werden, wie folgt:

$_SERVER[" PHP_SELF"]=>"/ index.php", es gibt keinen Parameter in der URL

$_SERVER["PATH_INFO"]=>, er existiert überhaupt nicht, da Nginx diesen nicht übergibt Variable

$_SERVER["REQUEST_URI"] =>"/article/update?id=1", dies ist der Schlüssel zur Implementierung des Routings, die Parameter sind alle vorhanden


Die kompatiblere Verarbeitung in PHP ist:

$uri=$_SERVER['REQUEST_URI'];
$uri=str_replace("/index.php","",$uri);
if(strpos($uri,"?")!==false){
   $uri=substr($uri,0,strpos($uri,'?'));
}
$uri=trim($uri,'/');
var_dump($uri);//获取到 article/update

Empfohlenes Tutorial: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEingehende Analyse der PHP-Framework-Routing-Implementierung unter Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen