启用 php 的位置内的 Nginx 重写规则
Nginx rewrite rule inside location with php enabled
我需要在我的默认服务器配置中有一个 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/ 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;
}
}
我需要在我的默认服务器配置中有一个 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/ 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;
}
}