Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress “转换Apache”;不是",;Nginx的规则_Wordpress_Apache_Nginx_Apache2 - Fatal编程技术网

Wordpress “转换Apache”;不是",;Nginx的规则

Wordpress “转换Apache”;不是",;Nginx的规则,wordpress,apache,nginx,apache2,Wordpress,Apache,Nginx,Apache2,我有一个Apache重写规则,可以防止Wordpress站点上的作者枚举。但是,为了维护Wordpress admin中的正确功能,此规则不适用于URI中包含/wp admin的任何请求 # apache RewriteCond %{REQUEST_URI} !^/wp-admin [NC] RewriteCond %{QUERY_STRING} author=\d [NC] RewriteRule ^ - [L,R=403] 什么是合适的Nginx等价物? 我知道的一些事情: Nginx认

我有一个Apache重写规则,可以防止Wordpress站点上的作者枚举。但是,为了维护Wordpress admin中的正确功能,此规则不适用于URI中包含
/wp admin
的任何请求

# apache

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} author=\d [NC]
RewriteRule ^ - [L,R=403]
什么是合适的Nginx等价物?

我知道的一些事情:

  • Nginx认为Apache的“不是”规则是“颠倒逻辑”,因此不支持类似的概念
  • Nginx不支持嵌套的
    if
    语句或多个条件
    if(THIS&&THAT){}
  • Nginx对每个请求都评估
    if
    语句,这对性能来说并不理想
  • Nginx认为
    if
    语句在位置上下文中是“邪恶的”,并进一步指出,这些if语句可能会出现意外行为。因此,建议避免使用它们
  • 这并没有给我留下很多选择。虽然我更喜欢不引入性能问题和/或不危及稳定性的配置,但我还是设法想出了以下配置

    # nginx
    
    location / {
        set $MATCH "";
        if ($uri !~* "^/wp-admin") { set $MATCH A; }
        if ($args ~ "^author=\d") { set $MATCH "${MATCH}B"; }
        if ($MATCH = AB) { return 403; }
        try_files $uri $uri/ /index.php?$args;
    }
    

    如何做得更好?

    我宁愿使用两个
    位置
    块:

    位置/{
    if($arg_author~ ^\d){return 403;}
    try_files$uri$uri//index.php?$args;
    }
    位置/工作包管理员{
    try_files$uri$uri//index.php?$args;
    }
    
    如果
    块为:

    如果在位置上下文中,可在内部执行的唯一100%安全操作是:

    return ...;
    rewrite ... last;