Я немного расстроен, так что любая помощь будет принята с благодарностью. Можно ли поймать каталог 404 / not found в сочетании с блоком FilesMatch в .htaccess?
Я создал следующие .htacces, чтобы переписать несуществующие. json -файлы в 204 No Контент (предотвращение ошибок при использовании $.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
.htaccess работает, когда я запрашиваю несуществующий файл конфигурации (b/b.json
), но когда я пытаюсь загрузить файл конфигурации несуществующего каталога (c/c.json
), вместо желаемого 204 будет возвращен код состояния 404.
Запрос a/a.json
дает httpStatusCode 200 (Найдено, что верно)
Запрос b/b.json
дает httpStatusCode 204 (Нет содержимого, также правильно, обрабатывается с помощью .htaccess)
Запрос c/c.json
дает httpStatusCode 404 (Not Found)
Я хочу, чтобы запрос c также возвращал 204 No Content. Я пробовал что-то вроде захвата каталога из запроса с использованием <FilesMatch .*\/(.*)\.(json)$>
и использования $1
для -d вместо %{REQUEST_FILENAME}
, но это не работает.
Я также пробовал чтобы отловить ошибку 404 с помощью ErrorDocument только для файлов. json, но это не работает. Перенаправление не сработает, и будет возвращен код статуса 404.
<FilesMatch "\.(json)$">
ErrorDocument 404 /204.php
</FilesMatch>
Что я делаю не так? Есть идеи, как это поймать?