2013-04-18 3 views
8

Я люблю новый apache httpd 2.4 с множеством новых интересных вещей!Apache regex backreferences UNREACHABLE в httpd 2.4?

ap_expr является одним из этих новых многообещающих возможностей,

..но следующий SSI фрагмент кода не работает, как ожидалось:

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$1"}} 
{{endif}} 

если работает НО вар ISN» t комплект! Это не имеет никакого смысла.

error.log говорит:

.. AH01330: regex capture $1 is out of range 

Док (http://httpd.apache.org/docs/2.4/expr.html#other) сбивает с толком и не имеет никаких образцов где-нибудь рядом.

Я знаю, что есть наследие (обходная) переключатель для SSI .. но я не хочу, чтобы использовать его, так как старые открывающие и закрывающие теги вынужденыLegacy

Делая подобное регулярное выражение-синтаксическим -tricks ж SetEnvIfExpr не помогает либо

+2

«Они обычно могут быть использованы только в том же выражении, что и согласования регулярных выражений, но некоторые модули позволяют специальные применения.» Я предполагаю, что это проблема, и вы должны соответствовать назначению в «то же» выражение, независимо от того, что этот домен. –

ответ

0

Согласно documentation:

Регулярное выражение обратные_связи струны $ 0 ... $ 9 позволяют ссылаться на группы захвата из ранее выполненного, успешно совпадающего с регулярными выражениями. Обычно их можно использовать только в том же выражении, что и соответствующее регулярное выражение, но некоторые модули допускают специальные применения.

Вы используете группу захвата, и вы ссылаетесь, что использование индекса 1, это должно быть в порядке, используя стандартный движок регулярных выражений, но в соответствии с документацией можно ссылаться из $0...$9. Я предполагаю, что апач заполняет INDE 0 с захватом группой вместо 1 и это вы получите regex capture $1 is out of range

Изменения индекса $1 к $0 с помощью:

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
{{set var="user" value="$0"}} 
{{endif}} 
+0

Кажется, это так, но я не думаю, что Apache-разработчики изобрели бы колесо! – hjpotter92

+0

@ hjpotter92 lol извините man ... мысль вы сделали –

1

путем изменений

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
    {{set var="user" value="$1"}} 
{{endif}} 

до

{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/"}} 
    {{set var="user" value="$0"}} 
    {{if expr="v('user') =~ /([^&]+)$/"}} 
     {{set var="user" value="$0"}} 
    {{endif}} 
{{endif}} 

можно обойти эту проблему, используя тот факт, что $ 0, кажется, работает

+0

A жизнь безопаснее!(не очень, но это очень помогло мне) – Mchl

0
{{if expr="v('HTTP_SESSION') =~ /-user=([^&]+)/ && $1 =~ /(.+)/"}} 
    {{set var="user" value="$0"}} 
{{endif}} 
+0

Это всего лишь кусок кода, который почти идентичен коду в других ответах. Чтобы этот код был полезен, он должен иметь объяснение того, что он делает, и почему он отвечает на вопрос. Учитывая, что он так похож на код в других ответах, он также должен объяснить, почему он отличается от них. – AdrianHHH

 Смежные вопросы

  • Нет связанных вопросов^_^