1

URL の書き換えについて明確なドキュメントを見つけることができません (ネイティブではない人にとってドキュメントは予想外に読みにくいため、理解できません)。

/*\.(js|png|jpg|css|ttf|xml)$/一致するすべてのルートを書き換えてpath/media/ファイルの存在を試み、存在する場合はそれを返す方法を探しています。404 not found

次に、で始まる場合は、/ajax/すべてを次の方向path/ajax/index.php にリダイレクトします。path/www/index.php

どうすればいいのかよくわかりません。今のところ、/media/、/ajax/、/www/の 3 つの場所を作成しましたが、rewrite を使用して返さないのが正しい方法であるかどうかはわかりません。場所はそれを行う正しい方法です。

私がsites-enabled/filefastcgi に関して書いたことをよく理解していません。これはインタープリターパスですか?

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

正解すれば「.phpで終わり、階層に存在する場合は実行する」ということです。

そして、php (/www/ と /ajax/) を処理する必要がある各場所にそのようなものを配置する必要があるかどうかはわかりません。特に、両方のルーティングを行う予定があるためです。また、そのようにすべきかどうかもわかりません。

4

1 に答える 1

1

最も単純な PHP 構成では、ロケーション ブロックによって継承される共通のrootディレクティブを使用します。この場合は次のようになります。

root path;

これは、/www/index.php/ajax/index.phpの両方がlocation ~ \.php$ブロックによって処理されることを意味します。

デフォルトのアクションは、ブロックtry_files内のディレクティブによって定義できます。location /

location / {
    try_files $uri $uri/ /www/index.php;
}

で始まる URI に対して別のデフォルト アクションが必要な場合は/ajax、より具体的な場所を追加します。

location /ajax {
    try_files $uri $uri/ /ajax/index.php;
}

メディア URI を先頭に置きたくない場合は、特定の場所/mediaの をオーバーライドできます。root

location ~* \.(js|png|jpg|css|ttf|xml)$ {
    root path/media;
}

特定のケースでは、ディレクティブfastcgi_split_path_infofastcgi_indexディレクティブは不要です。include fastcgi_params;ステートメントは、fastcgi_paramディレクティブが誤って上書きされないように、ディレクティブの前に配置する必要があります。

location ~ \.php$ {
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

詳細については、nginx のドキュメントを参照してください。

于 2016-03-19T14:21:28.117 に答える