apache - URL 上禁止 403 的问题
问题描述
我正在尝试/wp-admin/admin-ajax.php?action=force_refresh_get_site_version
使用 mod_rewrite 对 URL ( ) 进行 403 阻止。这是.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
文件系统路径上的任何其他文件,因为这些文件可能会造成冲突?
推荐阅读
- laravel-livewire - 为什么 AppHeader 组件的方法不会在发出时触发?
- apache-spark - 在 lambda 中使用 pyspark sql 函数导致 pickle 错误
- flutter - 如何在 HorizontalPicker Flutter 中显示来自 JSON 的时间?
- amazon-web-services - 如果我使用 ECR 映像/容器,我的 AWS Lambda 函数的冷启动会需要更长时间吗?
- azure - 了解 Azure Web App 日志文件输出中的 HTTP 错误
- css - Sass/SCSS 没有在本地编译
- python - response.json 不工作,现在 python 很时髦
- java - 无法从 Java 中的属性文件中为 Selenium 中的 Select 加载定位器
- javascript - 练习 JavaScript
- r - 在 purrr 中创建 RMarkdown 标头和代码块