我的 Web 服务器多年来一直使用 lighttpd 和 PHP-FPM 运行 PHP 应用程序。现在,在第 3 方软件升级后,我必须包含一些规则才能激活 REST API。
<IfModule mod_setenvif.c>
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
</IfModule>
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>
我想了解它在做什么,如果有支持,我会根据 lighttpd 配置重写它。
它将调用的环境变量设置
HTTP_AUTHORIZATION
为 HTTP 请求标头的值Authorization
(如果有)。这在您的服务器配置上可能不是必需的。PHP 应该自动设置它,但是,取决于 PHP 在某些 Apache 配置上的安装方式,这不会发生 - 因此有这段代码。(请注意,上面的代码尝试以两种不同的方式设置它 - 但最终结果“几乎”相同。)前端控制器 - 所有未映射到现有文件(或目录)的请求都在内部重写为
/api/index.php
. 这是标准的“前端控制器模式”。所以,基本上,上面的代码只是一个标准的前端控制器,它将所有请求定向到
/api/index.php
.不幸的是,我不会说 lighttpd,但谷歌搜索
lighttpd front controller
提供了一些可能性。例如,从此页面,如果启用了必要的模块,他们建议您可以执行以下操作:虽然,这看起来并不像它实际上检查请求文件的存在,而是假设文件请求将具有文件扩展名(我的解释)。
设置 HTTP_AUTHORIZATION ("CGI") 环境变量应该作为 CGI 设置的一部分进行(标头
HTTP_...
以 .重写配置重写所有不针对
/api/
子路径中的静态文件或目录的请求。不使用的 lighttpd (1.4.24+
)中最接近的mod_magnet
是:这也将触发目录(只有常规文件不会被重写),但我认为您实际上不太可能需要
/api/
路径中的目录列表,所以它可能没问题。