我有以下情况,我正在开发一个 API。我将所有流量重写为一个名为: 的 PHP 脚本route.php
,使用mod_rewrite
如下:
1: RewriteEngine On
2: RewriteCond %{REQUEST_FILENAME} -f [OR]
3: RewriteCond %{REQUEST_FILENAME} -d
4: RewriteRule ^.* route.php [L]
其他文件不应该被访问,这就是为什么我route.php
只使用白名单来访问。因此我使用这个:
order allow,deny
<FilesMatch "route\.php">
allow from all
</FilesMatch>
我想将所有 1xx、2xx(200 除外)、4xx 和 5xx HTTP 状态代码发送到 PHP 脚本(假设error.php?code=404
显示该状态代码的动态错误页面。在这种情况下,我可能必须允许访问error.php
也在FilesMatch
部分。
我找到了部分我想要的东西,如本文所述,但我无法实现或设法让它按照我上面描述的方式工作。
我的目的是error.php
显示一个 JSON 输出(基于状态码动态),{'statusCode':'404','status':'Not Found'}
包括我使用的所有常见(安全)HTTP 标头。
这个问题没有引起太多关注,我自己回答了这个问题。所以特此回答。这可以通过以下方式实现。欢迎任何改进。
下面应该在
.htaccess
文件中:文件中应包含以下内容
error.php
:这似乎不适用于所有 HTTP 错误代码,例如 414“Request-URI Too Long”,并且总是回退到 403 Forbidden。