Estou tentando escrever uma API REST simples e atualmente estou tentando configurar corretamente meu .htaccess
arquivo.
O que eu gostaria de alcançar é o seguinte:
- tem
RewriteRule
s para direcionar solicitações para o RestController real - capturar todas as solicitações não atendidas explicitamente com um
RewriteRule
antes com um erro FITTING- solicitações que visam qualquer arquivo, subdiretório ou arquivo no subdiretório não tratado com um anterior
RewriteRule
devem ser respondidas403
- solicitações que visam qualquer arquivo ou subdiretório inexistente devem ser respondidas
404
- solicitações que visam qualquer arquivo, subdiretório ou arquivo no subdiretório não tratado com um anterior
O que consegui até agora é:
- ✅ servindo arquivos inexistentes, subdiretórios e arquivos em subdiretórios
404
- ✅ servindo arquivos e subdiretórios existentes sem a devida
RewriteRule
403
- ❌ encaminhamento de solicitações de API válidas para o endpoint adequado (parou de funcionar depois que adicionei a última
403
regra) - ❌ servindo
403
para arquivos existentes EM SUBDIRS sem os devidosRewriteRule
- ex. quando tento acessardomain.com/subdir/existingfile.pdf
, na verdade mostra o arquivo, o que não quero.
Como os subdiretórios podem ser criados dinamicamente, desejo que TODOS os subdiretórios e arquivos neles sejam tratados 403 sem precisar especificá-los manualmente.
Esta é a minha corrente .htaccess
:
Options -Indexes
RewriteEngine on
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# REST mappings
RewriteRule ^json$ RestController.php?key=json [L,nc,qsa]
RewriteRule ^file/(.*)$ RestController.php?key=file&id=$1 [L,nc,qsa]
RewriteRule ^actions$ RestController.php?key=actions&id=none [L,nc,qsa]
RewriteRule ^actions/(.*)$ RestController.php?key=actions&id=$1 [L,nc,qsa]
# catch all non-matched requests and throw 404 or 403 accordingly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ - [R=404,NC,L]
RewriteRule ^ - [R=403,NC,L]