nginxではPATH_をサポートINFOのメソッドインスタンスの詳細

4145 ワード

この例では、nginxでサポートされているPATH_を分析します.INFOの方法.皆さんの参考にしてください.具体的には以下の通りです.
nginxにPATH_をサポートさせるにはINFO、まずpathinfoとは何かを知る必要があります.なぜpathinfoを使うのですか.
pathinfoはnginxの機能ではなく、pathinfoはphpの機能です.
phpには2つのpathinfoがあり、1つは環境変数$SERVER['PATH_INFO'];もう1つはpathinfo関数で、pathinfo()関数はファイルパスの情報を配列で返します.
nginxでできることは$_だけですSERVER['PATH_INFO]値の設定.
次に、比較的直感的な例を挙げて説明します.まずphpの2つのpathinfoの役割を話して、nginxにpathinfoをサポートさせる方法について話します.
phpの2つのpathinfo
phpのpathinfo()
pathinfo()関数は、入力されたパスを判断し、以下の要素を含むファイルパスの情報を配列で返すことができます.
[dirname]パスのディレクトリ[basename]接尾辞付きファイル名[extension]ファイル接尾辞[filename]接尾辞付きファイル名なし(php 5.2以降が必要)
たとえば




しゅつりょく

Array
(
  [dirname] => /nginx
  [basename] => test.txt
  [extension] => txt
  [filename] => test
)


phpの$SERVER['PATH_INFO']
PHPのグローバル変数$SERVER['PATH_INFO'],PATH_INFOはCGI 1.1の標準であり、パラメータベクターとしてよく用いられる.
多くのシステムによってurl経路フォーマットを最適化するために用いられ,THINKPHPフレームワークのように最も有名である.
次のURLについて:
http://www.test.cn/index.php/test/my.html?c=index&m=search
$を得ることができますSERVER['PATH_INFO'] = '/test/my.html'、この時点で$SERVER['QUERY_STRING'] = 'c=index&m=search';
高度な方法を借りなければphpではhttp://www.test.com/index.php?type=search このようなURLはよくありますが、多くの人はあまり美しくないと感じているかもしれませんし、検索エンジンにも非常に友好的ではありません(実際には影響があるかどうかは不明ですが)、現在の検索エンジンはすでにスマートなので、パラメータ付きの接尾辞ページを受け取ることができますが、清潔さを考慮してURLを書き直したいと思っています.
次は解析利用PATH_INFOの書き換えを行う非常に簡単なコード:




以上の認識があればnginx対$_に介入することができます.SERVER['PATH_INFO']でサポートされている問題です.その前にphpも紹介します.iniの構成パラメータcgi.fix_pathinfoは、cgiモードでphpに絶対パス情報またはPATH_を提供するかどうかを設定するために使用されます.INFO情報.このパラメータがない前にPHPに絶対パスPATH_を設定TRANSLATEDの値はSCRIPT_FILENAME、PATH_なしINFO値.このパラメータをcgiに設定.fix_pathinfo=1後、cgiは完全なパス情報PATH_を設定するTRANSLATEDの値はSCRIPT_FILENAME、PATH_を設定INFO情報cgiに設定すると.fix_pathinfo=0は絶対パスPATH_のみ設定TRANSLATEDの値はSCRIPT_FILENAME.cgi.fix_pathinfoのデフォルト値は1です.
nginxデフォルトではPATH_は設定されませんINFO環境変数の値はphpでcgiを使用する必要がある.fix_pathinfo=1は経路情報の取得を完了するが、同時にセキュリティ上の危険性をもたらし、cgiを必要とする.fix_pathinfo=0を0に設定するとphpはPATH_を取得できませんINFO情報、それらはPATH_に依存するINFOがURL美化を行うプログラムは無効になります.
1.phpのPATH_の代わりにrewrite方式で代用できるINFO
例:thinkphpのpathinfoソリューション
URL_の設定MODEL=2

location / {
  if (!-e $request_filename){
    rewrite ^/(.*)$ /index.php?s=/$1 last;
  }
}


2.nginxプロファイルでのPATH_の設定INFO値
リクエストのURLは/abc/indexです.php/abc
PATH_INFOの値は/abc SCRIPT_FILENAMEの値は$doucment_root/abc/index.php SCRIPT_NAME/abc/index.php
旧バージョンのnginxは、次のように構成されています.

location ~ .php($|/) {
  set $script $uri;
  set $path_info "";
  if ($uri ~ "^(.+.php)(/.+)") {
    set $script $1;
    set $path_info $2;
  }
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$script;
  fastcgi_param SCRIPT_NAME $script;
  fastcgi_param PATH_INFO $path_info;
}


新しいバージョンのnginxではfastcgi_も使用できます.split_path_infoコマンドによるPATH_の設定INFOは、従来の方法では推奨されていませんが、locationセグメントに次の構成を追加します.

location ~ ^.+\.php {
 (...)
 fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
 fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
 (...)
}

最後にapacheがこの問題を起こさない理由を聞く人がいるかもしれません.
apacheは一般的にphpをモジュールで実行し、apacheは$SERVER['PATH_INFO']の値を設定し、別途の構成は不要です.
本明細書の永続アドレス:http://blog.it985.com/7768.html 本文はIT 985ブログから出て、転載する時出典と相応のリンクを明記してください.
本明細書で説明することは、nginxサーバの構成に役立つことを期待します.