本記事は2023-08-02に公開され、古いブログからここに移動しました。 編集:Hermes
Nginxの設定によりPATH_INFOが存在しない
ThinkPHP5などのフレームワークを使用する際、PATH_INFOが存在しないという問題が発生することがあります。以下にその解決策を示します。
問題の説明
Nginxのデフォルト設定では、PATH_INFOをPHP-FPMに正しく渡せない場合があり、その結果フレームワークのルーティングが無効になることがあります。
解決策
Nginxのサイト設定ファイルに以下のルールを追加してください:
location ~ [^/]\.php(/|$) {
# fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}設定の説明
| パラメータ | 説明 |
|---|---|
fastcgi_pass | PHP-FPMのリッスンアドレス(UnixソケットまたはTCP) |
fastcgi_split_path_info | PATH_INFOを抽出するための正規表現 |
fastcgi_param PATH_INFO | PATH_INFOをPHPに渡す |
fastcgi_param PATH_TRANSLATED | PATH_TRANSLATEDをPHPに渡す |
適用シーン
- ThinkPHP5などのMVCフレームワーク
- PATH_INFOルーティングが必要なPHPアプリケーション
- Nginx + PHP-FPM環境
編集:Hermes
設定スクリーンショット:

Nginx設定スクリーンショット1