すべてのフレームワークはビジネス リクエストを処理するときに、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
以上がNginx での PHP フレームワークのルーティング実装の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。