<-
Apache > HTTP Server > Documentation > Version 2.3

Expressions in Apache

Available Languages:  en 

Historically, there are several syntax variants for expressions used to express a condition in the different modules of the Apache HTTP Server. There is some ongoing effort to only use a single variant, called ap_expr, for all configuration directives. This document describes the ap_expr expression parser.

top

Grammar in BNF notation

expr        ::= "true" | "false"
              | "!" expr
              | expr "&&" expr
              | expr "||" expr
              | "(" expr ")"
              | comp

comp        ::= stringcomp
              | integercomp
              | unaryop word
              | word binaryop word
              | word "in" "{" wordlist "}"
              | word "in" listfunction
              | word "=~" regex
              | word "!~" regex


stringcomp  ::= word "==" word | word "eq" word
              | word "!=" word | word "ne" word
              | word "<"  word | word "lt" word
              | word "<=" word | word "le" word
              | word ">"  word | word "gt" word
              | word ">=" word | word "ge" word

integercomp ::= word "-eq" word | word "eq" word
              | word "-ne" word | word "ne" word
              | word "-lt" word | word "lt" word
              | word "-le" word | word "le" word
              | word "-gt" word | word "gt" word
              | word "-ge" word | word "ge" word

wordlist    ::= word
              | wordlist "," word

word        ::= word "." word
              | digit
              | "'" string "'"
              | """ string """
              | variable
              | function

string      ::= stringpart
              | string stringpart

stringpart  ::= cstring
              | variable

cstring     ::= ...
digit       ::= [0-9]+

variable    ::= "%{" varname "}"
              | "%{" funcname ":" funcargs "}"

function     ::= funcname "(" word ")"

listfunction ::= listfuncname "(" word ")"
top

Variables

XXX: not all vars are available in all request phases

Request headers (XXX:see req function)

Name
HTTP_ACCEPT
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_REFERER
HTTP_USER_AGENT

Other request related variables

NameDescription
REQUEST_METHOD
REQUEST_SCHEME
REQUEST_URI
REQUEST_FILENAME
REMOTE_HOST
REMOTE_IDENT
REMOTE_USER
SERVER_ADMIN
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
IS_SUBREQ
DOCUMENT_ROOT
AUTH_TYPE
THE_REQUEST
CONTENT_TYPE
REMOTE_ADDR
HTTPS
IPV6

Misc variables

NameDescription
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
SERVER_SOFTWARE
API_VERSION
top

Binary operators

With the exception of some built-in comparison operators, binary operators have the form "-[a-zA-Z][a-zA-Z0-9_]+", i.e. a minus and at least two characters. The name is not case sensitive. Modules may register additional binary operators.

NameAlternative Description
== = String equality
!= String inequality
< String less than
<= String less than or equal
> String greater than
>= String greater than or equal
-eq eq Integer equality
-ne ne Integer inequality
-lt lt Integer less than
-le le Integer less than or equal
-gt gt Integer greater than
-ge ge Integer greater than or equal
top

Unary operators

Unary operators have the form "-[a-zA-Z]", i.e. a minus and one character. The name is case sensitive. Modules may register additional unary operators.

NameDescription
-n String is not empty (XXX: not yet implemented)
-z String is empty (XXX: not yet implemented)
top

Functions

Normal string-valued functions take one string as argument and return a string. Functions names are not case sensitive. Modules may register additional functions.

NameDescription
req, http Get HTTP request header
resp Get HTTP response header
osenv Lookup operating system environment variable
env Lookup request environment variable (XXX: will need to be changed for better ssl_expr compat)
lolower Convert string to lower case
toupper Convert string to uppser case
escape Escape special characters in %hex encoding
unescape Unescape %hex encoded string, leaving URL-special characters encoded (XXX: describe better)

In addition to string-valued functions, there are also list-valued functions which take one string as argument and return a wordlist, i.e. a list of strings. The wordlist can be used with the special -in operator. Functions names are not case sensitive. Modules may register additional functions.

There are no built-in list-valued functions. mod_ssl provides PeerExtList (XXX: link)

Available Languages:  en