我有点沮丧,所以任何帮助都将不胜感激。是否可以捕获找不到的404/目录,以及.htaccess中的FilesMatch块?
我创建了以下.htacce,以便将不存在的.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 statusCode,而不是所需的204。
请求a/a.json
会给httpStatusCode 200(已找到,这是正确的(
请求b/b.json
会给出httpStatusCode 204(无内容,也正确,由.htaccess处理(
请求c/c.json
会给出httpStatusCode 404(未找到(
我希望请求c也返回一个204无内容。我尝试过一些方法,比如使用<FilesMatch .*/(.*).(json)$>
从请求中捕获目录,并使用$1
代替%{REQUEST_FILENAME}
作为-d,但这不起作用。
我还尝试使用ErrorDocument捕获404错误,仅针对.json文件,但这无法正常工作。重定向将不起作用,并且将返回404状态代码。
<FilesMatch ".(json)$">
ErrorDocument 404 /204.php
</FilesMatch>
我做错了什么?有什么办法抓住这个吗?
这里不需要使用FilesMatch
,只需在RweriteRule本身中直接限制它适用于哪些URL即可。
RewriteRule .json$ - [R=204]