【问题标题】:Problems with 403 forbidden on URLURL 上禁止 403 的问题
【发布时间】:2018-11-07 13:16:51
【问题描述】:

我正在尝试使用 mod_rewrite 对 URL (/wp-admin/admin-ajax.php?action=force_refresh_get_site_version) 进行 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 禁止。有点混乱。感谢您为解决此问题提供的任何帮助。

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    有点混乱。

    是的,这毫无意义!似乎有“其他事情”发生?

    您发布的指令会阻止指定的 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 文件,因为这些文件可能会造成冲突?

    【讨论】:

    • 感谢您的回复。我尝试了建议的 RewriteCond 和 RewriteRule 您建议阻止 URL。但是,我仍然收到 404。这是在共享服务器上,所以可能会发生一些可疑的事情?路径中没有其他可能导致冲突的 .htaccess 文件。当我得到 404 时,静态资源(CSS、JS 等)仍然可以正常加载。无论如何,我厌倦了这个问题并通过 PHP 文件中的一些代码更改来解决它。再次感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2020-06-04
    • 1970-01-01
    相关资源
    最近更新 更多