Nginx CodeIgniter удаляет index.php в URL-адресе

У меня установлен выделенный сервер с CentOS 6.5 Plesk 11.5, и я включил Nginx для обработки файлов PHP.

Я включил службы в Plesk Инструменты / Управление службами:

  • Обратный прокси-сервер (nginx)
  • Поддержка PHP-FPM для nginx

и в Domains / example.com / Настройки веб-сервера

  • Умная обработка статических файлов
  • Обслуживайте статические файлы напрямую с помощью nginx
  • Обработка PHP с помощью nginx

Я использую CodeIgniter Framework, с настройками по умолчанию все работает хорошо. Но когда я пытаюсь удалить index.php в файле конфигурации CodeIgniter (config.php)

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

предыдущий URL example.com/project/index.php/text превращается в example.com/project/text хотя я не могу получить доступ к ссылке и имею следующую ошибку:

Не указан входной файл.

Я искал и есть много решений, у меня ничего не работало. Plesk автоматически генерирует конфигурации Nginx для каждого домена. Согласно руководствам, я попытался добавить этот код в Дополнительные директивы nginx в Domains / example.com / Настройки веб-сервера.

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

У меня другая ошибка:

Файл не найден.

Что мне изменить и где? Я потратил 2 дня безуспешно.

У меня есть следующий код в example.com.conf, но он автоматически создается Plesk.

server {
    listen IP_IS_HIDDEN:80;

    server_name domain.com;
    server_name www.example.com;
    server_name ipv4.example.com;


    client_max_body_size 128m;


    root "/var/www/vhosts/example.com/httpdocs";
    access_log /var/www/vhosts/system/example.com/logs/proxy_access_log;


    if ($host ~* ^www.example.com$) {
        rewrite ^(.*)$ http://example.com$1 permanent;
    }

    location / {
        proxy_pass http://IP_IS_HIDDEN:7080;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        access_log off;
    }

    location @fallback {
        proxy_pass http://IP_IS_HIDDEN:7080;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        access_log off;
    }

    location ~ ^/plesk-stat/ {
        proxy_pass http://IP_IS_HIDDEN:7080;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        access_log off;
    }

    location ~ ^/(.*\.(ac3|avi|bmp|bz2|css|cue|dat|doc|docx|dts|exe|flv|gif|gz|htm|html|ico|img|iso|jpeg|jpg|js|mkv|mp3|mp4|mpeg|mpg|ogg|pdf|png|ppt|pptx|qt|rar|rm|swf|tar|tgz|txt|wav|xls|xlsx|zip))$ {
        try_files $uri @fallback;
    }

    location ~ ^/~(.+?)(/.*?\.php)(/.*)?$ {
        alias /var/www/vhosts/example.com/web_users/$1/$2;
        fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass "unix:/var/www/vhosts/system/example.com/php-fpm.sock";
        include /etc/nginx/fastcgi.conf;    }

    location ~ ^/~(.+?)(/.*)?$ {
        proxy_pass http://IP_IS_HIDDEN:7080;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        access_log off;
    }

    location ~ \.php(/.*)?$ {
        fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_pass "unix:/var/www/vhosts/system/example.com/php-fpm.sock";
        include /etc/nginx/fastcgi.conf;    }

    location ~ /$ {
        index index.html index.cgi index.pl index.php index.xhtml index.htm index.shtml;
    }


    include "/var/www/vhosts/system/example.com/conf/vhost_nginx.conf";
}

person ikzi    schedule 12.06.2014    source источник


Ответы (2)


Я наконец решил проблему перезаписи. Что важно, Plesk генерирует параметры по умолчанию в файле конфигурации Nginx, любые изменения внутри этого файла являются временными.

Чтобы удалить index.php из проектов CodeIgniter, просто добавьте этот код для каждого проекта в Plesk> Домены / example.com / Настройки веб-сервера:

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

и удалите параметр index.php в CodeIgniter config.php:

$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
person ikzi    schedule 13.06.2014
comment
для моей подпапки project / ci; это решено. Однако он не может открыть index.php, если упомянул localhost/ci/ в браузере, для этого я сделал следующее: location /ci { index index.html index.htm index.php; try_files $uri $uri/ /ci/index.php; } - person Amit Shah; 10.10.2016
comment
Удаление значения $indexPage все еще работает на CodeIgniter 4. спасибо - person fsevenm; 03.04.2020

РЕШЕНО

Если папка моего проекта находится в / ci внутри каталога / html в nginx,

Приведенный выше ответ @ikxi работал, чтобы открыть страницу, например

http://localhost/ci/welcome

Однако это не открывалось index.php, если я просто набирал

http://localhost/ci/

Но это решение отлично сработало для меня, добавив nginx.conf файл.

Найдите что-то вроде этого:

// This lines will be there
location / {
    root   html;
    index  index.html index.htm index.php;
}
// just keep above as it is.. (or you can add "index.php")

Добавьте после него следующие строки:

location /ci {
    index  index.html index.htm index.php;
    try_files $uri $uri/ /ci/index.php; 
}
person Amit Shah    schedule 10.10.2016