2013-03-05 62 views
0

我想拒绝bingbot访问/ wp-admin和/wp-login.php,但我遇到了我的nginx配置问题。我开始与以下:nginx - 解析后继续返回

location ~ /(wp-admin|wp-login\.php) { 
    if ($http_user_agent ~* "(alltheweb|baidu|bingbot|googlebot|msnbot|slurp)") { 
     return 403; 
     break; 
    } 
} 

# Allow any php files to run 
location ~ \.php$ { 
    try_files $uri =404; 
    include /etc/nginx/fastcgi.conf; 
    fastcgi_pass unix:/var/lib/php/php.socket; 
} 

这只是正常的阻挡bingbot,但它也不会执行wp-login.php;它将它视为一个静态文件。我想:“好吧,你不通过下降到另外的场所块”,所以我复制的PHP代码到更高的一个:

location ~ /(wp-admin|wp-login\.php) { 
    if ($http_user_agent ~* "(alltheweb|baidu|bingbot|googlebot|msnbot|slurp)") { 
     return 403; 
     break; 
    } 
    location ~ \.php$ { 
     try_files $uri =404; 
     include /etc/nginx/fastcgi.conf; 
     fastcgi_pass unix:/var/lib/php/php.socket; 
    } 
} 

# Allow any php files to run 
location ~ \.php$ { 
    try_files $uri =404; 
    include /etc/nginx/fastcgi.conf; 
    fastcgi_pass unix:/var/lib/php/php.socket; 
} 

这使我再次登录,而不是下载wp-login.php,但现在bingbot是再次获得HTTP 200 OK!我如何有选择地返回403或PHP处理程序正确?

回答

1

你可以尝试

if ($http_user_agent ~* "(alltheweb|baidu|bingbot|googlebot|msnbot|slurp)") { 
    location ~ /(wp-admin|wp-login\.php) { 
     return 403; 
    } 
} 

但是,您可能想设置这样的:

location /spider_blocked { 
    return 403; 
} 

if ($http_user_agent ~* "(alltheweb|baidu|bingbot|googlebot|msnbot|slurp)") { 
    rewrite ^/(wp-admin|wp-login\.php) /spider_blocked redirect; 
} 

基本上,你正在做的是建立了nginx的一个特殊的抓URL,做在特定用户代理访问的特定URL上重定向,并将其重定向到特殊的捕获URL以被阻止。

+0

这是一个更好的解决方案,谢谢! – staticfloat 2013-03-06 06:03:24