ThinkPHP の URL 書き換えと PATHINFO
をサポートするように Nginx を構成する
ThinkPHP は、PATHINFO と URL 書き換えによるわかりやすい URL の提供をサポートしています。構成ファイルで 'URL_MODEL' => 2 を設定するだけです。 Apache では、通常のアクセスのために mod_rewrite モジュールを有効にするだけで済みます。ただし、Nginx はデフォルトで PATHINFO をサポートしていないため、nginx.conf ファイルを変更する必要があります。
インターネットで多くの方法を検索しましたが、どれもうまくいきませんでした。1 日かけて調べた結果、「URL_MODEL」=> 2 の状況は、次の構成で完全にサポートできることがわかりました。
?index インデックス.php;?
?if (!-e $request_filename) { ?
?rewrite ^/project/(.*)$ /project/index.php/$1 last;?
?break;?
?}?
?}?
??
?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_indexindex.php?IF_REWRITE=1;?
? include /APMSer/nginx/conf /fastcgi_params;?
?fastcgi_param PATH_INFO $path_info;?
?fastcgi_param SCRIPT_FILENAME $document_root/$script;?
?fastcgi_param SCRIPT_NAME $script;?
?}
ここでは、プロジェクト内のすべてのリクエストが処理のためにindex.phpに転送されます。これはThinkPHPの単一のエントリファイルであり、その後、PHPファイルに対するリクエストは処理およびサポートのためにfastcgiに渡されます。 PATH_INFO 用が追加されました。
Nginx を再起動すると、http://localhost/project/Index/insert や http://localhost/project/index.php/Index/delete などの URL に正しくアクセスできるようになります。
もう 1 つ注意すべき点は、Nginx 設定ファイル内の if とそれに続く括弧の間にスペースが必要であることです。そうしないと、不明なディレクティブ エラーが報告されます。これを調整するのに長い時間がかかりました
?
システムエラーが発生しました
[再試行][戻る]または[ホームページに戻る]を選択できます
[エラーメッセージ]
パブリックモジュールをロードできません
解決中