Директива SetEnvIfNoCase не соответствует IP

Директива SetEnvIfNoCase не соответствует IP

Я пытаюсь установить некоторые определенные заголовки на основе IP-адреса клиента через обратный прокси-сервер Apache. Я пытаюсь использоватьSetEnvIfNoCase/УстановитьEnvIfно у меня почему-то не получается написать правильное регулярное выражение :(

Вот что я попытался установить в httpd.conf (предположим, что директивы обратного прокси в порядке — так оно и есть):

SetEnvIfNoCase Remote_Addr "192\.168*" user_location_internal
RequestHeader set x-acme-user-location internal env=user_location_internal

Допустим, запрос поступает с 192.168.1.100. Тогда регулярное выражение должно совпадать — я пробовал его в нескольких онлайн-валидаторах, которые заявляют о своей совместимости с perl, и 192.168.1.100 соответствует "192.168*". В документации SetEnvIf также утверждается, что он соответствует perl reg ex.

Однако это не работает. Единственный синтаксис, который работал, был следующим:

SetEnvIfNoCase Remote_Addr 192* user_location_internal
RequestHeader set x-acme-user-location internal env=user_location_internal

Затем заголовок устанавливается, так что проблема каким-то образом связана с синтаксисом регулярного выражения. Так что я предполагаю, что я неправильно экранирую точку. Однако согласно:http://perldoc.perl.org/perlre.html#Регулярные-выраженияОбратный слеш — правильный символ для экранирования метасимволов.

Есть предположения, в чем проблема?

решение1

Регулярное выражение для сопоставления IP-адреса может быть следующим:

SetEnvIfNoCase Remote_Addr ^192\.168.* user_location_internal

Обратите внимание на .*часть. Без точки это работает, потому что 192*означает 192ноль или более раз, что соответствует Remote_Addr:

$ pcretest
PCRE version 8.33 2013-05-28

  re> /^192*/
data> 192.foo.bar.baz
 0: 192
  re> /^192\.168.*/
data> 192.168.12.12
 0: 192.168.12.12
data> 192.167.23.45
No match

Связанный контент