web-dev-qa-db-ja.com

Apache認証ヘッダールールをLighttpdに移行します

私の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設定に基づいて書き直したいと思います。

1
LeonanCarvalho

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/パス内にディレクトリリストが必要になる可能性は低いと思うので、おそらく問題ありません。

1
Stefan

それが何をしているのか理解したい

  1. HTTP_AUTHORIZATIONという環境変数をAuthorization HTTPリクエストヘッダー(存在する場合)の値に設定します。これは、サーバー構成では必要ない場合があります。 PHPはこれを自動的に設定する必要がありますが、PHPが一部のApache構成にインストールされている方法によっては、これは発生しません-したがって、このビットのコードです(注意してください)。上記のコードは、これを2つの異なる方法で設定しようとしますが、最終的な結果は「ほぼ」同じです。)

  2. フロントコントローラー-既存のファイル(またはディレクトリ)にマップされないすべてのリクエストは、内部で/api/index.phpに書き換えられます。これは標準の「フロントコントローラーパターン」です。

したがって、基本的に、上記のコードは、すべての要求を/api/index.phpに送信する標準のフロントコントローラーにすぎません。

lighttpdの設定に基づいて書き直します

残念ながら、私はlighttpdを話しませんが、グーグルlighttpd front controllerはいくつかの可能性を引き出します。たとえば、 このページから 必要なモジュールが有効になっている場合、次のようなことができると提案されます。

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

ただし、実際に要求されたファイルの存在をチェックするようには見えませんが、ファイルの要求にはファイル拡張子が付いていると想定しています(私の解釈)。

1
MrWhite