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

我有以下代码redirect访问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文件,而不是将用户redirect到其他页面。 所有其他的PHP文件正在工作,除了该文件(login.php)。 如果我删除上面的代码,它工作正常,但它不会redirect。

我尝试了以下内容:

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

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

但是他们都没有为我工作。 我也重新启动整个服务器,但它没有工作。

有什么build议吗?

不要使用单独的位置。 在你的configuration中,没有fastcgi指令来处理用户不是bad_user的情况,因此nginx将它视为一个静态文件并直接提供。

相反,把支票放在你现有的 location ~ \.php$块,然后在那里检查login.php

例如:

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