我有以下代码将访问 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