Nginx重写位置内的规则,启用了php



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

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

我正在尝试像这样配置它:

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 配置得很好。

所以我认为我忘记了一些要配置的东西。

最后,问题是应用程序不能在路径内工作。如果我看到应用程序配置,我看到以下内容:

$_DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
因此,

很容易使其在路径上工作,但应用程序不适用于相对路径,因此在 login 内部调用后,将在根路径内搜索身份验证方法。

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

无论如何,我让登录页面正常工作,只是删除重写规则并在索引参数上添加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;
    }
}   

最新更新