web-dev-qa-db-ja.com

Apacheは環境変数値を取得します

環境変数の値を取得して、Apacheの別の変数に割り当てたいのですが。

たとえば、$_SERVER['REMOTE_ADDR']の値を取得して$_SERVER['USER-IP']に割り当て、$_SERVER['REMOTE_ADDR']127.0.0.1にオーバーライドします。

REMOTE_ADDRの値を取得できない

<IfDefine !USER-IP>
  SetEnv USER-IP %{REMOTE_ADDR}
  SetEnv REMOTE_ADDR '127.0.0.1'
</IfDefine>
2
MontrealDevOne

ドキュメントを見て、$_SERVER['REMOTE_ADDR'] varは厳密には環境変数ではありませんが、Webサーバーによってcgiコンテキストに提供されるcgi要求メタ変数です。 http://www.faqs.org/rfcs/rfc3875.html

メタ変数には、サーバーからスクリプトに渡されたリクエストに関するデータが含まれています

  meta-variable-name = "AUTH_TYPE" | "CONTENT_LENGTH" |
                       "CONTENT_TYPE" | "GATEWAY_INTERFACE" |
                       "PATH_INFO" | "PATH_TRANSLATED" |
                       "QUERY_STRING" | "REMOTE_ADDR" |
                       "REMOTE_Host" | "REMOTE_IDENT" |
                       "REMOTE_USER" | "REQUEST_METHOD" |
                       "SCRIPT_NAME" | "SERVER_NAME" |
                       "SERVER_PORT" | "SERVER_PROTOCOL" |
                       "SERVER_SOFTWARE" | scheme |

Apacheのドキュメントは、これらの変数は標準のSetEnvstyleディレクティブを使用してオーバーライドできないことを示しています

注意事項

環境操作ディレクティブを使用して標準CGI変数をオーバーライドまたは変更することはできません。
https://httpd.Apache.org/docs/2.4/env.html#setting

したがって、Apache confからこれらの値を簡単に設定できる可能性は低いと思います

環境変数の設定

(既存のサーバー変数から)

<Directory /var/www/server111>
    Order allow,deny
    Allow from all

    # This syntax works, as you can see from the image below...
    RewriteEngine On
    RewriteRule .* - [E=USER-IP:%{REMOTE_ADDR}]

    # none of these syntax seem to work
    SetEnv USERIP %{REMOTE_ADDR}
    SetEnv USERIP2 blah
    SetEnv USERIP3 ${REMOTE_ADDR}
    SetEnv USERIP6 %{ENV:REMOTE_ADDR}
</Directory> 

enter image description here

3
Tom H