nginx + php-fpm - আমার G _GET প্যারামগুলি কোথায়?


34

আমার এখানে একটা অদ্ভুত সমস্যা আছে। আমি সবেমাত্র অ্যাপাচি + মোড_এইচপি থেকে এনগিনেক্স + পিএইচপি-এফপিএম এ চলেছি। এই সমস্যাটি বাদে সবকিছু ঠিকঠাক হয়ে গেছে।

আমার একটি সাইট আছে, যাক উদাহরণ ডটকম। আমি যখন এটি অ্যাক্সেস করি তখন যেমন example.com?test=get_param $_SERVER['REQUEST_URI']হয় /?test=get_paramএবং তেমন $_GET['test']একটিও থাকে।

কিন্তু আমি এক্সেস যখন example.com/ajax/search/?search=get_param $_SERVER['REQUEST_URI']হয় /ajax/search/?search=get_paramএখনো কিছু নেই $_GET['search'](সেখানে নেই $_GETএ সব অ্যারে)।

আমি কোহানা ফ্রেমওয়ার্ক ব্যবহার করছি। যা যাত্রাপথ /ajax/searchকন্ট্রোলার, কিন্তু আমি রেখেছি phpinfo()index.phpতাই আমি চেক করছি $_GETভেরিয়েবল আগে ফ্রেমওয়ার্ক কিছু আছে (মানে হল এই যে disapearing পেতে প্যারাম অবকাঠামো দোষ না হয়)।

আমার nginx.conf এর মত

worker_processes  4;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    index index.html index.php;
    autoindex on;
    autoindex_exact_size off;
    include       mime.types;
    default_type  application/octet-stream;
    server_names_hash_bucket_size 128;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;
    error_log   logs/error.log   debug;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     off;

    keepalive_timeout  2;

    gzip  on;
    gzip_comp_level 2;
    gzip_proxied any;
    gzip_types text/plain text/css application/x-javascript text/xml application/xml     application/xml+rss text/javascript;


    include sites-enabled/*;
}

এবং example.conf এর মত

server {
  listen 80;
  server_name www.example.com;
  rewrite ^ $scheme://example.com$request_uri? permanent;
}




server {
    listen   80;
    server_name example.com;
    root /var/www/example/;

    location ~ /\. {
        return 404;
    }

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

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        /usr/local/nginx/conf/fastcgi_params;
    }

    location ~* ^/(modules|application|system) {
        return 403;
    }

        # serve static files directly
        location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
                access_log        off;
                expires           30d;
        }
}

fastcgi_params এর মত

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;


fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;


fastcgi_param QUERY_STRING    $query_string;
fastcgi_param PATH_INFO       $fastcgi_path_info;

এখানে কি সমস্যা?

উপায় দ্বারা একই সার্ভারে আরও কয়েকটি সাইট রয়েছে, উভয় কোহানা ভিত্তিক এবং সরল পিএইচপি, যে পুরোপুরি কার্যকরভাবে কাজ করছে।

উত্তর:


73

আপনি আপনার চেষ্টা_ফায়াল কলটিতে আর্গুমেন্ট পাচ্ছেন না

প্রশ্নে:

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

হতে হবে:

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

আপনি $ ক্যোয়ারী_স্ট্রিং বা $ টি আরোগুলি ব্যবহার করতে পারেন , সেগুলি সমান - কেবল $query_stringপঠনযোগ্য ছাড়া (বা বিকল্পভাবে, $argsআপনি যুক্ত করতে চান এমন কোনও যুক্তি দ্বারা আপডেট করা যেতে পারে)


3
+1 স্লিমের নিজস্ব নিজস্ব ডকুমেন্টেশন ভুল
ব্রোডি

it দিতো; ঘৃণ্য জিনিসটিকে অন্য প্রকল্পের জন্য বাছাই করার চেষ্টা করে ঘন্টা ব্যয় করল। ধন্যবাদ অ্যাড 7 সিক্স।
রিজান্ডেল

2
সর্বশেষ স্লিম 3 ডকুমেন্টেশন থেকে:try_files $uri $uri/ /index.php$is_args$args;
মিশ্রদেব

যদি আমরা ফাস্টসিগির পরিবর্তে পিএইচপি-এফএমপি ব্যবহার করি? "$
কোয়েরি_স্ট্রিং


1

আমার নিয়ম ব্যবহার করে দেখুন:

location / {
    try_files $uri $uri/ @koh;
}

location @koh {
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www/example/index.php;
    include        /usr/local/nginx/conf/fastcgi_params;
}

ফাস্টসিগি_প্যারেমগুলিতে নকল "ফাস্টসিজি_প্রেম QUERY_STRING" মুছুন।


এটি কাজ করে না। উপর ajax/searchএটা example.com এটা ডাউনলোড উইন্ডো পপ আপ উপর 500 ত্রুটি, দেয় এবং ডাউনলোড করা ফাইলটি index.php হল
নিশ্চিত আশ্রয়

1
যাইহোক, আমি একটি উত্তর নিয়ে এসেছি, try_files $uri $uri/ index.php;অবশ্যই হবে try_files $uri $uri/ /index.php?$args; #or /index.php?$query_string, mind the '?', তবে এটি ভাল লাগবে যে কেউ এটি ব্যাখ্যা করেছেন :)
উদাহরণস্বরূপ

বিটিডব্লিউ, আপনার কনফিগারেশনের জন্য ত্রুটি লগ, আলভোসু বলেছেন could not find named location @koh
উদাঃ

দুঃখিত, আমি একটি ভুল হয়েছে। আমি "অবস্থান" সংশোধন করেছি।
alvosu
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.