>  기사  >  백엔드 개발  >  Nginx에서의 PHP 프레임워크 라우팅 구현에 대한 심층 분석

Nginx에서의 PHP 프레임워크 라우팅 구현에 대한 심층 분석

angryTom
angryTom앞으로
2019-10-14 10:59:522673검색

모든 프레임워크는 비즈니스 요청을 처리할 때 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제