簡體   English   中英

Nginx在啟用PHP的位置內重寫規則

[英]Nginx rewrite rule inside location with php enabled

我需要在默認服務器配置中包含一個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配置正確。

所以我認為我忘記了要配置的東西。

最后的問題是應用程序無法在路徑內運行。 如果看到應用程序配置,則會看到以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM