[英]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.