Назад | Перейти на главную страницу

NGINX + Codeigniter не работает, не может получить доступ к контроллерам и отправить параметры контроллерам

Я хочу запустить codeigniter под NGINX, но он просто не работает. Я хочу иметь возможность отправлять параметры в методы контроллеров. Но пока я даже не могу получить доступ к контроллеру по адресу example.com/index.php/welcome.php. Это говорит Не указан входной файл. Однако когда я набираю example.com/index.php/ он перенаправляет на контроллер приветствия. Я бы сказал, что перепробовал все файлы конфигурации nginx в Интернете.

это моя конфигурация ngnix

  server {
      ## Your website name goes here.
      server_name compute.amazonaws.com;
      ## Your only path reference.
      root /var/www/;
      listen 80;
      ## This should be in your http block and if it is, it's not needed here.
      index index.html index.htm index.php;

            location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
                  expires max;
                  log_not_found off;
          }


         # location / {
                  # This is cool because no php is touched for static content
                #try_files $uri $uri/ /index.php?q=$uri&$args;
            #   try_files $uri $uri/ /index.php;
         #

       location / {
              try_files $uri $uri/ /index.php?$args;
              if (!-e $request_filename) {
                    rewrite ^/(.*)$ /index.php?q=$1 last;
              }
            }

          location ~ \.php$ {
              #try_files $uri =404;
              #fastcgi_split_path_info ^(.+\.php)(/.+)$;
              fastcgi_split_path_info ^(.+\.php)(.*)$;
      #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
      #
      #       # With php5-cgi alone:
      #       fastcgi_pass 127.0.0.1:9000;
      #       # With php5-fpm:
              fastcgi_pass unix:/var/run/php5-fpm.sock;
              fastcgi_index index.php;
              include fastcgi_params;
              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          }
  }     

это мой долгожданный контроллер

           <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

           class Welcome extends CI_Controller {

            function __construct()
            {
                parent::__construct();
            }

            function index()
            {
                $this->load->helper('url');
                $this->load->view('welcome_message');
            }
            function a($a)
            {
                echo "AHOJ ";
                echo $a;
            }
           }

Я хочу иметь возможность вызывать функцию а от контроллера приветствия и получите ответ. По сути, я хочу создать REST-сервер, и это мой routes.php

     $route['default_controller'] = "welcome";
     $route['404_override'] = '';
     $route['test_welcome'] = 'welcome';
     $route['api/v1/(:any)'] = "api_v1/$1";
     $route['item/(:any)'] = "item/show_item/$1";

     $route['scaffolding_trigger'] = "";

Важная линия $ route ['api / v1 / (: any)'] = "api_v1 / $ 1"; Я хочу, чтобы это сработало.

Это мой codeigniter config.php

           $config['base_url']  = '';               
           $config['index_page'] = '';                              
           $config['uri_protocol']  = 'REQUEST_URI';

Пожалуйста, помогите мне как-нибудь. большое спасибо

Наконец-то все заработало. Я использовал конфигурацию nginx из https://gist.github.com/lynxluna/1050850 и немного изменил его. Это мой конфиг

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

         index index.html index.htm index.php;

         location ~* \.(ico|css|js|gif|jpe?g|png)$ 
        {
            expires max;
            add_header Pragma public;
            try_files $uri /index.html;
        }

         # ROOT Location
         location / {
             try_files $uri $uri/ @rewrites;
         }    

         location @rewrites {
             if (!-e $request_filename)
            {
                rewrite ^/(.*)$ /index.php/$1 last;
                break;
            }
         }

         location = /favicon.ico {
             access_log off;
             log_not_found off;
         }



         location ~ /\. {
             access_log off;
             log_not_found off;
             deny all;
         }

         # PHP Configs
         fastcgi_intercept_errors on;

         location ~ \.php {
          fastcgi_split_path_info ^(.+\.php)(/.+)$;

          fastcgi_param  PATH_INFO            $fastcgi_path_info;
          fastcgi_param  PATH_TRANSLATED      $document_root$fastcgi_path_info;

          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  SCRIPT_FILENAME      $document_root$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  SERVER_SOFTWARE      nginx;

          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;

          fastcgi_index  index.php;
         fastcgi_pass unix:/var/run/php5-fpm.sock;
         }
     }