0

我有点沮丧,所以任何帮助将不胜感激。是否可以在 .htaccess 中捕获未找到的 404/目录以及 FilesMatch 块?

我创建了以下 .htacces 以将不存在的 .json 文件重写为 204 No Content (防止使用时出现错误$.getJSON):

<FilesMatch "\.(json)$">

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d [OR]
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^ - [R=204]

</FilesMatch>

我用以下文件/目录结构测试了一些东西:

httpdocs
 - a
  - a.json
 - b

当我请求一个不存在的配置文件 ( b/b.json) 时,.htaccess 有效,但是当我尝试加载一个不存在的目录 ( c/c.json) 的配置文件时,将返回 404 状态代码而不是所需的 204。

请求a/a.json给出 httpStatusCode 200(找到,这是正确的)

请求b/b.json给出 httpStatusCode 204(无内容,也正确,由 .htaccess 处理)

请求c/c.json给出 httpStatusCode 404(未找到)

我希望请求 c 也返回 204 No Content。我已经尝试过一些事情,比如使用<FilesMatch .*\/(.*)\.(json)$>和使用$1-d 而不是 -d从请求中捕获目录%{REQUEST_FILENAME},但这不起作用。

我还尝试使用 ErrorDocument 捕获 404 错误,仅适用于 .json 文件,但这不起作用。重定向将不起作用,并且将返回 404 statusCode。

<FilesMatch "\.(json)$">

    ErrorDocument 404 /204.php

</FilesMatch>

我究竟做错了什么?任何想法如何抓住这个?

4

1 回答 1

1

此处无需使用FilesMatch,您可以简单地在 RweriteRule 本身中直接限制适用的 URL。

RewriteRule \.json$ - [R=204]
于 2020-08-07T10:26:16.897 回答