xginx で特定のパスを書き換える

xginx で特定のパスを書き換える

nginx を使用して特定のパスを書き換えようとしています。nginx/php-fpm/php を使用してサーバーをセットアップしましたが、正常に動作しています。

サーバー構成は次のとおりです。

server {
    listen 80;

    server_name domain.com;
    root /srv/www/domain.com/public;

    location ~ ^/index.php($|/) {
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass   127.0.0.1:9000;
        include        fastcgi_params;
    }

    location / {
       index index.php;
            try_files $uri /index.php?$args;
    }
}

そして、これは機能します。つまり、 にアクセスすると、 php ファイルは正常にレンダリングされます。ただし、特定のパスを にhttp://domain.com書き換えようとしています。これを行うには、次のブロックを設定に追加しました(ブロックの前)。/update/whatever/update.php?var=whateverlocationlocation ~ ^/index.php($|/) {

location ~* ^\/update/(\w+)$ {
    rewrite ^/update/(\w+)$ /update.php?browser=$1 last;
}

しかし、URL にアクセスしようとすると、http://domain.com/update/whateverPHP から解析された出力が提供されるのではなく、php ファイルがダウンロードされます。

また、そのロケーション ブロックにディレクティブを追加してみましたがfastcgi、結果は同じでした。私の設定で何が間違っているのか、誰か教えてもらえますか?

答え1

この行:

location ~ ^/index.php($|/) {

nginx に PHP インタープリターにのみ渡すように指示しindex.php、他の PHP ファイルにも適用する必要があるため、ここではより一般的なルールが必要です。

location ~ ^/(.*).php($|/) {

関連情報