3

リクエストヘッダーを変更してLuaでリダイレクトしようとしています。試してみました

 ngx.redirect("/")

 ngx.exec("/")

しかし、私は次のエラーが発生しています:

attempt to call ngx.redirect after sending out the headers

ヘッダー値を追加して Lua の別の場所にリダイレクトする簡単な方法はありますか? ドキュメントでは、適切なディレクティブが見つかりませんでした。 content_by_lua_fileを使用しながら、このようなことを行う方法はありますか?

私はopenrestyを使用しています。

4

1 に答える 1

3

リダイレクト メソッドのドキュメントから:

このメソッド呼び出しは現在のリクエストの処理を終了し、 ngx.send_headers または ngx.print または ngx.say による明示的なレスポンス ボディ出力の前に呼び出す必要があることに注意してください。

そのため、それを確認するか、 rewrite_by_luaなどの別のリクエスト フェーズ ハンドラを使用してください。

ヘッダーの設定については、ngx.headerを使用します

例えば:

location /testRedirect {
   content_by_lua '
     ngx.header["My-header"]= "foo"
     return ngx.redirect("http://www.google.com")
   ';
}

カールhttp://127.0.0.1/testRedirect

出力:

HTTP/1.1 302 Moved Temporarily
Server: openresty
Date: Tue, 30 Jun 2015 17:34:38 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
My-header: foo
Location: http://www.google.com

<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

注: ほとんどのサイトは、リダイレクトからのカスタム ヘッダーを受け入れないため、その場合は Cookie の使用を検討してください。

于 2015-06-30T17:36:08.227 に答える