Я хочу запустить 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;
}
}