Maison > Article > développement back-end > Analyse approfondie de l'implémentation du routage du framework PHP sous Nginx
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!