繁体   English   中英

URL上禁止使用403的问题

[英]Problems with 403 forbidden on URL

我正在尝试使用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。 有点令人困惑。 感谢您提供帮助解决此问题。

有点令人困惑。

是的,这没有道理! 似乎还会有“其​​他”事件吗?

您发布的指令将阻止指定的URL-实际上,由于您没有检查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文件,因为这些文件可能会产生冲突?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM