[英]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.