将 Apache 授权标头规则迁移到 Lighttpd

将 Apache 授权标头规则迁移到 Lighttpd

我的 Web 服务器多年来一直使用 lighttpd 和 PHP-FPM 运行 PHP 应用程序。现在,在第三方软件升级后,我必须添加一些规则才能激活 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 配置重写它。

答案1

设置 HTTP_AUTHORIZATION(“CGI”)环境变量应该作为 CGI 设置的一部分(标头作为传递HTTP_...),并且 lighttpd 不会从中排除“Authorization”标头,因此在 lighttpd 中无需执行任何操作。

重写配置会重写所有不针对子路径中的静态文件或目录的请求。lighttpd ( )/api/中最接近的配置是:1.4.24+mod_magnet

url.rewrite-if-not-file = ( "^/api/" => "/api/index.php" )

这也会触发目录(只有常规文件不会被重写),但我认为您实际上不太可能需要路径内的目录列表/api/,所以这可能没问题。

答案2

我想了解它在做什么

  1. 它会将一个名为的环境变量设置HTTP_AUTHORIZATION为 HTTP 请求标头的值Authorization(如果有)。这可能不是您服务器配置所必需的。PHP 应该会自动设置它,但是,根据 PHP 在某些 Apache 配置上的安装方式,这种情况不会发生 - 因此需要这段代码。(请注意,上述代码尝试以两种不同的方式设置它 - 但最终结果“几乎”相同。)

  2. 前端控制器 - 所有未映射到现有文件(或目录)的请求均在内部重写为/api/index.php。这是标准的“前端控制器模式”。

因此,基本上,上面的代码只是一个将所有请求定向到的标准前端控制器/api/index.php

并根据lighttpd配置重写

不幸的是,我不会使用 lighttpd,但谷歌搜索后lighttpd front controller找到了一些可能的方法。例如,从此页面,只要启用了必要的模块,他们建议您可以执行以下操作:

url.rewrite-once = ( "^/(.*)\.(.*)" => "$0", "^/([^.]+)$" => "/index.php", "^/$" => "/index.php" )

虽然,这看起来并不像它实际上检查所请求文件是否存在,而是假设文件请求将具有文件扩展名(我的解释)。

相关内容