3

私はnginx + phpfpm + phpmyadminのこの構成を持っています:

root /var/www/utils;

location ~ ^/phpmyadmin/.*\.(jpg|jpeg|gif|png|css|js|ico)$ {
    root           /var/www/utils;
}

location = /phpmyadmin {
    index index.php;
}

location ~ ^/phpmyadmin.*(\.php|)$ {
    index          index.php;
    fastcgi_index  index.php;
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

すべて問題ありませんが、「location = /phpmyadmin」を削除すると、_http://server/phpmyadmin で 403 エラーが発生します。

_http://server/phpmyadmin/setup などのすべてのサブディレクトリにアクセスするにはどうすればよいですか?

「スクリプト '/var/www/utils/phpmyadmin/setup' へのアクセスが拒否されました - すべてのディレクトリで末尾にスラッシュがない場合、それぞれに特別な構成を作成していない場合。

4

1 に答える 1

1

nginxのドキュメントに記載されているように:

$ fastcgi_script_name変数は着信要求URIの値を取り、URIがスラッシュで終了する場合、$fastcgi_script_nameにfastcgi_indexディレクティブで定義されたものが追加されます。

したがって、リクエストが「/phpmyadmin/setup/」でfastcgi_indexが「index.php」に設定されている場合、$fastcgi_script_name変数は「/phpmyadmin/setup/index.php」になります。したがって、$document_rootと$fastcgi_script_nameは「/var/www/utils/phpmyadmin/setup/index.php」になり、正常に機能するはずです。

ただし、「/ phpmyadmin / setup」(末尾にスラッシュを付けない)のようなリクエストを行うと、$ fastcgi_script_nameはfastcgi_indexによって追加されません。つまり、「/ phpmyadmin/setup」になります。また、$document_rootと$fastcgi_script_nameは「/var / www / utils / phpmyadmin / setup」になりますが、このようなファイルがないため機能しません。

スラッシュ付きのURIを使用するか、(構成の「サーバー」ブロックで)書き換えルールを定義する必要があります。これにより、拡張子で終わらないURIにスラッシュが追加されます(「/ phpmyadmin / myscript」などのURI)。 php"は"/phpmyadmin/myscript.php/"に変換されません。次のようになります。

rewrite ^([^\.]*[^\/])$ $1/ break;

しかし、それを自分でテストしませんでした。

于 2012-11-10T09:21:00.007 に答える