私のWebサーバーはPHP lighttpdとPHP-FPMを使用するアプリケーションを何年も実行しています。サードパーティのソフトウェアをアップグレードした後、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( "CGI")環境変数の設定はCGIセットアップの一部として行う必要があり(ヘッダーはHTTP_...
として渡されます)、lighttpdは「Authorization」ヘッダーをこれから除外しないため、ここでは何もしません。 lighttpd。
Rewrite構成は、/api/
サブパス内の静的ファイルまたはディレクトリを対象としないすべての要求を書き換えます。 1.4.24+
を使用せずにlighttpd(mod_magnet
)で最も近いものは次のようになります。
url.rewrite-if-not-file = ( "^/api/" => "/api/index.php" )
これはディレクトリに対してもトリガーされます(通常のファイルのみが書き換えられません)が、実際に/api/
パス内にディレクトリリストが必要になる可能性は低いと思うので、おそらく問題ありません。
それが何をしているのか理解したい
HTTP_AUTHORIZATION
という環境変数をAuthorization
HTTPリクエストヘッダー(存在する場合)の値に設定します。これは、サーバー構成では必要ない場合があります。 PHPはこれを自動的に設定する必要がありますが、PHPが一部のApache構成にインストールされている方法によっては、これは発生しません-したがって、このビットのコードです(注意してください)。上記のコードは、これを2つの異なる方法で設定しようとしますが、最終的な結果は「ほぼ」同じです。)
フロントコントローラー-既存のファイル(またはディレクトリ)にマップされないすべてのリクエストは、内部で/api/index.php
に書き換えられます。これは標準の「フロントコントローラーパターン」です。
したがって、基本的に、上記のコードは、すべての要求を/api/index.php
に送信する標準のフロントコントローラーにすぎません。
lighttpdの設定に基づいて書き直します
残念ながら、私はlighttpdを話しませんが、グーグルlighttpd front controller
はいくつかの可能性を引き出します。たとえば、 このページから 必要なモジュールが有効になっている場合、次のようなことができると提案されます。
url.rewrite-once = ( "^/(.*)\.(.*)" => "$0", "^/([^.]+)$" => "/index.php", "^/$" => "/index.php" )
ただし、実際に要求されたファイルの存在をチェックするようには見えませんが、ファイルの要求にはファイル拡張子が付いていると想定しています(私の解釈)。