Maison  >  Article  >  développement back-end  >  Analyse approfondie de l'implémentation du routage du framework PHP sous Nginx

Analyse approfondie de l'implémentation du routage du framework PHP sous Nginx

angryTom
angryTomavant
2019-10-14 10:59:522673parcourir

Lorsque tous les frameworks traiteront les demandes commerciales, ils traiteront la partie chemin de l'URL et l'attribueront au code spécifié pour le traitement.
La clé pour réaliser cette fonction est d'obtenir les données de la partie URL dans la variable globale $_SERVER

Lorsque le chemin demandé est
http://test.com/article ?id= 1
http://test.com/article/update?id=1

Prend en charge le mode URL ci-dessus, pas besoin de configurer la variable de passage PATH_INFO, et pas besoin de configurer la suppression pseudo-statique index.php
La configuration nginx la plus simple est la suivante :

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;
        }   
}

Il y a plusieurs points clés à prendre en compte dans cette configuration :

1.try_files doit être configuré dans le bloc d'emplacement. Cela peut être utilisé pour supprimer index.php S'il n'est pas configuré, vous devez ajouter /index.php/
2. .location ~ .php
a. Parfois, vous vous demandez si cela se termine par $. Le point clé est de vérifier si try_files existe. S'il n'y a pas d'instruction try_files, alors il ne doit pas se terminer par $. , il est toujours accessible en utilisant le mode avec /index.php/ dans le chemin
b S'il existe une directive try_files et que l'emplacement ~ .php$ se termine ici par $, alors /index.php/ ne peut pas être. correspond à l'emplacement de php, mais try_files réécrit les paramètres en index.php?q= won, il est donc également accessible de cette façon.

À l'heure actuelle, dans la variable $_SERVER, les valeurs de variables qui sont souvent utilisées pour le traitement du routage par les principaux frameworks ou programmes auto-écrits sont les suivantes :

$_SERVER[" PHP_SELF"]=>"/ index.php", il n'y a aucun paramètre dans l'URL

$_SERVER["PATH_INFO"]=>, il n'existe pas du tout, car Nginx ne passe pas cela variable

$_SERVER["REQUEST_URI"] =>"/article/update?id=1", c'est la clé pour implémenter le routage, les paramètres existent tous


Le traitement le plus compatible en PHP est :

$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

Tutoriel recommandé : Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer