
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=whatever
location
location ~ ^/index.php($|/) {
location ~* ^\/update/(\w+)$ {
rewrite ^/update/(\w+)$ /update.php?browser=$1 last;
}
しかし、URL にアクセスしようとすると、http://domain.com/update/whatever
PHP から解析された出力が提供されるのではなく、php ファイルがダウンロードされます。
また、そのロケーション ブロックにディレクティブを追加してみましたがfastcgi
、結果は同じでした。私の設定で何が間違っているのか、誰か教えてもらえますか?
答え1
この行:
location ~ ^/index.php($|/) {
nginx に PHP インタープリターにのみ渡すように指示しindex.php
、他の PHP ファイルにも適用する必要があるため、ここではより一般的なルールが必要です。
location ~ ^/(.*).php($|/) {