我有点沮丧,所以任何帮助将不胜感激。是否可以在 .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>
我究竟做错了什么?任何想法如何抓住这个?