【发布时间】:2021-07-08 02:28:30
【问题描述】:
我有一个 Apache 重写规则,可以防止在 Wordpress 网站上枚举作者。但是,为了在 Wordpress 管理员中保持正确的功能,此规则不适用于 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;
}
如何才能做得更好?
【问题讨论】:
标签: wordpress apache nginx apache2