Nginx在启用PHP的位置内重写规则

时间:2019-01-30 17:30:05

标签: php nginx nginx-location nginx-config

我需要在默认服务器配置中包含一个php应用程序。

此应用程序也是以前在我翻译为nginx的.htaccess文件上具有重写规则的apache服务器上分配的。

我正在尝试像这样进行配置:

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 :(得分:1)

最后一个问题是应用程序无法在路径内运行。如果看到应用程序配置,则会看到以下内容:

$_DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];

因此,很容易使其在路径上工作,但是应用程序不适用于相对路径,因此在login中进行调用后,将在根路径中搜索auth方法。

因此需要重写应用程序的某些部分,然后它才能在路径中工作。

无论如何,我得到的登录页面只是删除重写规则并在索引参数上添加controller.php。像这样的东西应该起作用:

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;
    }
}