Nginx 重写下载 php 而不是运行它

Nginx 重写下载 php 而不是运行它

我有以下代码将访问 login.php 的用户重定向到另一个页面:

http {
....
geo $bad_user {
  default 0;
  1.2.3.4/32 1;
  4.3.2.1/32 1;
 }

server {
....
location = /login.php {
if ($bad_user) {
rewrite ^ http://example.com/foo.php;
      }
  }
 }
}

它使 login.php 文件下载,而不是将用户重定向到其他页面。除该文件 (login.php) 外,所有其他 php 文件均正常工作。如果我删除上述代码,它会正常工作,但不会进行重定向。

我尝试了以下操作:

      rewrite ^ http://example.com/foo.php last;

&

      rewrite ^ http://example.com/foo.php$1 last;

但它们对我都不起作用。我也重新启动了整个服务器,但还是不起作用。

请问有什么建议吗?

答案1

不要使用单独的位置。您的配置中没有 fastcgi 指令来处理用户不是 bad_user 的情况,因此 nginx 会将其视为静态文件并直接提供服务。

相反,把支票放在你的现存的 location ~ \.php$阻止,然后检查是否login.php存在。

例如:

location ~ \.php$ {
    if ($bad_user) {
        rewrite ^/login.php http://example.com/foo.php;
    }
    #....everything else

相关内容