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>

1 ответ

Решение

Глядя на документы, $_SERVER['REMOTE_ADDR'] var - это не просто переменная окружения, а мета-переменная 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 указывают, что эти переменные не могут быть переопределены с использованием стандартного SetEnv директивы стиля

Некоторые предостережения

Невозможно переопределить или изменить стандартные переменные CGI с помощью директив манипуляции средой.
https://httpd.apache.org/docs/2.4/env.html

Поэтому я думаю, что вряд ли вы сможете легко установить эти значения из 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> 

Другие вопросы по тегам