ホームページ  >  記事  >  バックエンド開発  >  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 は location ブロックで設定する必要があります。これは、index.php を削除するために使用できます。設定されていない場合は、/index.php/
2 を追加する必要があります.location ~ \.php
a. $ で終わるかどうかで悩むことがあります。重要なのは、try_files が存在するかどうかを確認することです。try_files ディレクティブが存在しない場合は、$ で終わってはいけません。この方法では、パスに /index.php/ を指定したモードを使用することで引き続きアクセスできます。
b. try_files ディレクティブがあり、場所 ~ \.php$ が $ で終わる場合は、/index. php/ は php の場所に一致しませんが、try_files によってパラメータが Index.php? q= に書き換えられるため、この方法でもアクセスできます。

このとき、$_SERVER変数において、主要なフレームワークや自作プログラムでルーティング処理によく使われる変数値は以下のとおりです。

$_SERVER[" PHP_SELF"]=>"/index.php"、URL にパラメータ

$_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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。