URL上禁止使用403的问题

时间:2018-11-07 13:16:52

标签: apache mod-rewrite

我正在尝试使用mod_rewrite 403阻止URL(/wp-admin/admin-ajax.php?action=force_refresh_get_site_version)。这是.htaccess文件:

RewriteEngine on
RewriteCond %{QUERY_STRING} \baction=force_refresh_get_site_version\b [NC]
RewriteRule ^ - [F,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

...但是,这给了我404。

但是如果我删除这两行:

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f

...我被禁止了403。有点令人困惑。感谢您为解决此问题提供的帮助。

1 个答案:

答案 0 :(得分:0)

  

有些令人困惑。

是的,这没有任何意义!似乎还有“别的东西”在发生?

您发布的指令将阻止所声明的URL-实际上,由于您没有检查URL路径,因此它可能会阻止太多。要阻止特定于 的网址,您可以使用类似以下内容的内容:

RewriteCond %{QUERY_STRING} ^action=force_refresh_get_site_version$
RewriteRule ^wp-admin/admin-ajax.php$ - [F]

L标志是多余的,当您使用F标志时会被暗示

404响应状态的一个可能原因是,您的自定义403(在.htaccess或服务器配置中定义)是否覆盖了状态代码并显式设置了404。(这在某些共享服务器上并不少见。)但是,这似乎与您在下面看到的内容无关……

  

但是如果我删除这两行:

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f

这两行似乎与问题无关,因为前面的指令应该已经阻止了该请求。

第一个RewriteRule只是一个“优化”,可以防止在调用前控制器(通过最后一个RewriteRule指令)时不必要的文件系统检查。

如果您删除第一个RewriteCond指令,则意味着该请求(您尝试阻止的请求)否则将由WordPress前端控制器处理(不是针对较早的指令,应该阻止请求)。这很可能会导致404,而不是403。它还会断开状态资源(CSS,JS,图像等)的所有链接,因此您的网站不太可能正常工作?!

检查文件系统路径中是否有其他.htaccess个文件,因为它们可能会产生冲突?