我正在尝试编写一个简单的 REST API,目前正在尝试正确配置我的.htaccess
文件。
我想要实现的目标如下:
- 必须
RewriteRule
将请求定向到实际的 RestController - 捕获所有未
RewriteRule
在之前明确提供服务并出现 FITTING 错误的 请求RewriteRule
应答复针对未使用前者处理的任何文件、子目录或子目录中的文件的请求403
- 应回答针对任何不存在的文件或子目录的请求
404
到目前为止我所取得的成就是:
- ✅ 提供不存在的文件、子目录和子目录中的文件
404
- ✅ 在没有适当的情况下提供现有文件和子目录
RewriteRule
403
- ❌ 将有效的 API 请求转发到正确的端点(在我添加最后一条
403
规则后它停止工作) - ❌
403
在没有适当的情况下为子目录中的现有文件提供服务RewriteRule
- 例如。当我尝试访问时domain.com/subdir/existingfile.pdf
,它实际上显示了我不想要的文件。
由于子目录可以动态创建,因此我希望处理 403 中的所有子目录和文件,而无需手动指定它们。
这是我目前的.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]