모든 프레임워크는 비즈니스 요청을 처리할 때 URL의 경로 부분을 처리하고 이를 처리를 위해 지정된 코드에 할당합니다.
이 기능을 구현하는 핵심은 $_SERVER 전역 변수에서 URL 부분의 데이터를 얻는 것입니다
요청 경로가
http://test.com/article?id=1
http://test일 때 .com/article/update?id=1
위 URL 모드를 지원하며 PATH_INFO 변수를 구성할 필요가 없으며 index.php
의 의사 정적 제거를 구성할 필요가 없습니다. 가장 간단한 nginx 구성은 다음과 같습니다. :
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; } }
이 구성에는 몇 가지 참고 사항이 있습니다.
1.try_files는 위치 블록에서 구성되어야 합니다. 구성되지 않은 경우 index.php를 제거하는 데 사용할 수 있습니다. php/
2.location ~ .php
a $로 끝나는지 고민되는 경우가 있습니다. 중요한 점은 try_files 지시어가 없으면 $로 끝나서는 안 된다는 것입니다. 경로에 /index.php/가 있는 패턴을 사용하세요. 여전히 액세스 가능합니다.
b try_files 지시문이 있고 여기의 ~ .php$ 위치가 $로 끝나면 /index.php/는 일치하지 않습니다. 하지만 try_files는 매개변수를 인덱스로 다시 작성합니다. php?q=가 성공했으므로 이 방법으로 액세스할 수 있습니다.
이때 $_SERVER 변수에서 주요 프레임워크나 자체작성 프로그램에서 라우팅 처리에 자주 사용하는 변수값은 다음과 같습니다.
$_SERVER["PHP_SELF"]=>"/ URL에 없는 index.php" 매개변수
$_SERVER["PATH_INFO"]=>는 Nginx가 이 변수
$_SERVER["REQUEST_URI"]=>를 전달하지 않기 때문에 전혀 존재하지 않습니다. "/article/update?id=1", 이것은 라우팅 구현의 핵심이며 매개변수가 모두 존재합니다
PHP에서 더 호환되는 처리는 다음과 같습니다:
$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
추천 튜토리얼: PHP 비디오 튜토리얼
위 내용은 Nginx에서의 PHP 프레임워크 라우팅 구현에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!