Nginx 重写:Location 指令内的 PHP 文件未提供

Nginx 重写:Location 指令内的 PHP 文件未提供

我正在尝试将子目录重定向到 php 文件。它不提供文件,而是下载它,这意味着它不会将其读取为 php 文件。

更确切地说,它没有进入 fastcgilocation ~ \.php$指令。

一些有趣的事实:

  • 对于集团来说一切都运行良好,admin但对于login区块链来说却并非如此。
  • 当我将指令移到我更改为的指令location ~ \.php$上方时,除了重写规则外,它仍然有效。login^~ /login~ /loginrewrite ^/login/(.+\.php)$ /$1 last;

我确实阅读了有关该主题的 Wiki Nginx 文档,因此我知道 nginx 读取位置指令的优先级,但这并没有告诉我如何处理这种情况!我还阅读了

配置如下:

server {
 listen  80;

 server_name tyba-one.com *.tyba-one.com;
 root /var/www/tyba/public_html;
 rewrite_log on;
 error_page 404 /404.php;
 client_max_body_size 4M;

 if ($host ~* ^www\.(.*)){
  set $host_without_www $1;
  rewrite ^/(.*)$ $scheme://$host_without_www/$1 permanent;
 }

 location = / {
   rewrite ^/$ /index.php last;
 }

 location ^~ /login {
  rewrite ^(/login)$ $1/ permanent;
  rewrite ^/login/$ /login.php last;
  rewrite ^/login/(.+\.php)$ /$1 last;
 }    

 location ^~ /admin {
  rewrite ^(/admin)$ $1/ permanent;
  rewrite ^/admin/$ /page_builder.php last;
  rewrite ^/admin/(.+\.php)$ /$1 last;
 }

 location ~ \.php$ {
  try_files $uri =404;
  include /opt/nginx/conf/fastcgi_params;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /var/www/tyba/public_html$fastcgi_script_name;
 }
}

我想了解发生了什么以及如何处理这种情况。

答案1

nginx 在每个嵌套级别仅处理一个位置块,因此由块而不是块/login.php处理。由于您的位置块中只有重写语句,因此您实际上根本不需要位置块(只要重写匹配足够具体,您的重写匹配就是如此)。只需将您的重写语句移动到块的根目录中,以便请求和仍然使用位置块:^~ /login~ \.php$server/login/admin\.php$

rewrite ^/$ /index.php last;
rewrite ^(/login)$ $1/ permanent;
rewrite ^/login/$ /login.php last;
rewrite ^/login/(.+\.php)$ /$1 last;
rewrite ^(/admin)$ $1/ permanent;
rewrite ^/admin/$ /page_builder.php last;
rewrite ^/admin/(.+\.php)$ /$1 last;

location ~ \.php$ {
    ...
}

答案2

mgorven 的回答解决了我的问题,我非常感激,我想回复,但我没有发言权,所以我将在这里回复并更新,虽然这个问题是在 8 年前在 2021 年提出并回答的,但我已经为这个问题绞尽脑汁好几天了

我有一个使用 HideMyWordPress 插件隐藏/保护的 Wordpress 实例 - 我从另一台 apache2 服务器移植了该实例,并与 apache 重写完美配合 - 但我是 nginx 新手 - mgorven 非常有帮助的回复不仅解决了我的问题,而且真正解释了我在所有挖掘过程中完全错过的一件事..关于位置块与重写 - 我现在正在浏览我已移动的所有网站,看看是否可以大大简化我的 nginx 配置

再次抱歉,我用“答案”而不是评论来回复,但是

即使是在 2021 年,这也是非常有用的信息,救了我一命

谢谢

相关内容