Правило перезаписи Nginx внутри локации с включенным php - PullRequest
0 голосов
/ 30 января 2019

Мне нужно иметь приложение php в конфигурации моего сервера по умолчанию.

Также это приложение ранее было размещено на сервере apache с правилами перезаписи в файле .htaccess, который я перевел на nginx.

Я пытаюсь настроить все так:

server {
        listen [::]:443;
        server_name _;

        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;

        location /admin {
                alias /var/www/sefoanco/html;
                index index.php index.html index.htm;

                try_files $uri $uri/ @admin;

                rewrite ^(/admin/.*)/login/ /login/controller.php break;
                rewrite ^(/admin/.*)/observacions/ /observacions/controller.php break;
                rewrite ^(/admin/.*)/usuari/ /usuari/controller.php break;
                rewrite ^(/admin/.*)/llistat/ /llistat/controller.php break;

                location ~ /admin/.+\.php$ {
                        include snippets/fastcgi-php.conf;

                        fastcgi_param SCRIPT_FILENAME $request_filename;    

                        fastcgi_split_path_info ^(.+\.php)(/.+)$;
                        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                        include fastcgi_params;
                }

            }

    location @admin {
        rewrite /admin/(.*)$ /admin/$1 last;
    }

}

Если я получаю доступ к localhost/admin/login, я получаю запрещенную ошибку 403.

Если я добавляюcontroller.php к индексным файлам, он отвечает правильно с ответом php, поэтому я думаю, что php хорошо настроен.

Так что я думаю, что что-то забыл настроить.

1 Ответ

0 голосов
/ 04 февраля 2019

Наконец проблема заключалась в том, что приложение не было создано для работы внутри пути.Если я вижу конфигурацию приложения, то вижу следующее:

$_DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

Итак, легко заставить его работать с путями, но приложение не работает с относительными путями, поэтому после выполнения вызова внутри login,будет искать метод аутентификации внутри корневого пути.

Поэтому необходимо переписать некоторые части приложения, прежде чем оно сможет работать внутри пути.

В любом случае, я получаю страницу входа, просто удаляя правила перезаписи и добавляя controller.php в параметре index.Что-то вроде должно работать:

server {
        listen [::]:443 ;
        server_name _;

        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html controller.php;

        location /admin {
         try_files $uri $uri/ =404; 
    }

    location ~ \.php($|/) {
        include snippets/fastcgi-php.conf;

        fastcgi_param SCRIPT_FILENAME $request_filename;

        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        include fastcgi_params;
    }
}   
...