mod_rewrite server-variables full list
Official mod_rewrite documentation is not very detailed about server-variables values which is usually used in RewriteCond rules. There is an easy way to get a list of server-variables values by exporting server variables into environment variables and than printing them by your web script, PHP works well
Here is .htaccess I have used for exporting variables.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | RewriteEngine On # special mod_rewrite variables RewriteRule .* - [E=MR_SPECIALS_API_VERSION:%{API_VERSION},NE] RewriteRule .* - [E=MR_SPECIALS_THE_REQUEST:%{THE_REQUEST},NE] RewriteRule .* - [E=MR_SPECIALS_REQUEST_URI:%{REQUEST_URI},NE] RewriteRule .* - [E=MR_SPECIALS_REQUEST_FILENAME:%{REQUEST_FILENAME},NE] RewriteRule .* - [E=MR_SPECIALS_IS_SUBREQ:%{IS_SUBREQ},NE] RewriteRule .* - [E=MR_SPECIALS_HTTPS:%{HTTPS},NE] # http headers RewriteRule .* - [E=MR_HEADERS_HTTP_USER_AGENT:%{HTTP_USER_AGENT},NE] RewriteRule .* - [E=MR_HEADERS_HTTP_REFERER:%{HTTP_REFERER},NE] RewriteRule .* - [E=MR_HEADERS_HTTP_COOKIE:%{HTTP_COOKIE},NE] RewriteRule .* - [E=MR_HEADERS_HTTP_FORWARDED:%{HTTP_FORWARDED},NE] RewriteRule .* - [E=MR_HEADERS_HTTP_HOST:%{HTTP_HOST},NE] RewriteRule .* - [E=MR_HEADERS_HTTP_PROXY_CONNECTION:%{HTTP_PROXY_CONNECTION},NE] RewriteRule .* - [E=MR_HEADERS_HTTP_ACCEPT:%{HTTP_ACCEPT},NE] # connection & request RewriteRule .* - [E=MR_REQUEST_REMOTE_ADDR:%{REMOTE_ADDR},NE] RewriteRule .* - [E=MR_REQUEST_REMOTE_HOST:%{REMOTE_HOST},NE] RewriteRule .* - [E=MR_REQUEST_REMOTE_PORT:%{REMOTE_PORT},NE] RewriteRule .* - [E=MR_REQUEST_REMOTE_USER:%{REMOTE_USER},NE] RewriteRule .* - [E=MR_REQUEST_REMOTE_IDENT:%{REMOTE_IDENT},NE] RewriteRule .* - [E=MR_REQUEST_REQUEST_METHOD:%{REQUEST_METHOD},NE] RewriteRule .* - [E=MR_REQUEST_SCRIPT_FILENAME:%{SCRIPT_FILENAME},NE] RewriteRule .* - [E=MR_REQUEST_PATH_INFO:%{PATH_INFO},NE] RewriteRule .* - [E=MR_REQUEST_QUERY_STRING:%{QUERY_STRING},NE] RewriteRule .* - [E=MR_REQUEST_AUTH_TYPE:%{AUTH_TYPE},NE] # server internals RewriteRule .* - [E=MR_SERVER_DOCUMENT_ROOT:%{DOCUMENT_ROOT},NE] RewriteRule .* - [E=MR_SERVER_SERVER_ADMIN:%{SERVER_ADMIN},NE] RewriteRule .* - [E=MR_SERVER_SERVER_NAME:%{SERVER_NAME},NE] RewriteRule .* - [E=MR_SERVER_SERVER_ADDR:%{SERVER_ADDR},NE] RewriteRule .* - [E=MR_SERVER_SERVER_PORT:%{SERVER_PORT},NE] RewriteRule .* - [E=MR_SERVER_SERVER_PROTOCOL:%{SERVER_PROTOCOL},NE] RewriteRule .* - [E=MR_SERVER_SERVER_SOFTWARE:%{SERVER_SOFTWARE},NE] # system stuff RewriteRule .* - [E=MR_SYSTEM_TIME_YEAR:%{TIME_YEAR},NE] RewriteRule .* - [E=MR_SYSTEM_TIME_MON:%{TIME_MON},NE] RewriteRule .* - [E=MR_SYSTEM_TIME_DAY:%{TIME_DAY},NE] RewriteRule .* - [E=MR_SYSTEM_TIME_HOUR:%{TIME_HOUR},NE] RewriteRule .* - [E=MR_SYSTEM_TIME_MIN:%{TIME_MIN},NE] RewriteRule .* - [E=MR_SYSTEM_TIME_SEC:%{TIME_SEC},NE] RewriteRule .* - [E=MR_SYSTEM_TIME_WDAY:%{TIME_WDAY},NE] RewriteRule .* - [E=MR_SYSTEM_TIME:%{TIME},NE] |
And PHP script for printing our environment variables set by mod_rewrite.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php header('Content-type: text/plain'); $types = array( 'MR_SPECIALS' => 'mod_rewrite specials', 'MR_HEADERS' => 'HTTP headers', 'MR_REQUEST' => 'connection & request', 'MR_SERVER' => 'server internals', 'MR_SYSTEM' => 'system stuff', ); foreach ($types as $prefix => $title) { echo "\n$title\n\n"; $length = strlen($prefix); foreach ($_SERVER as $k => $v) { if (!strncmp($prefix, $k, $length)) { $name = substr($k, $length + 1); echo "\t$name = $v\n"; unset($_SERVER[$k]); } } } |
In my case result of this script was:
mod_rewrite specials API_VERSION = 19990320:18 HTTPS = IS_SUBREQ = false REQUEST_FILENAME = /var/www/localhost/htdocs/rewrite/index.php REQUEST_URI = /rewrite/index.php THE_REQUEST = GET /rewrite/ HTTP/1.1 HTTP headers HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 HTTP_COOKIE = __utma=244126489.1603825951.1219764429.1219764429.1219764429.1; __utmz=244126489.1219764429.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none) HTTP_FORWARDED = HTTP_HOST = localhost HTTP_PROXY_CONNECTION = HTTP_REFERER = HTTP_USER_AGENT = Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3 connection & request AUTH_TYPE = PATH_INFO = QUERY_STRING = REMOTE_ADDR = 127.0.0.1 REMOTE_HOST = 127.0.0.1 REMOTE_IDENT = REMOTE_PORT = 41363 REMOTE_USER = REQUEST_METHOD = GET SCRIPT_FILENAME = /var/www/localhost/htdocs/rewrite/index.php server internals DOCUMENT_ROOT = /var/www/localhost/htdocs SERVER_ADDR = 212.47.219.48 SERVER_ADMIN = root@localhost SERVER_NAME = localhost SERVER_PORT = 80 SERVER_PROTOCOL = HTTP/1.1 SERVER_SOFTWARE = Apache/1.3.41 (Unix) PHP/5.3.0-dev mod_macro/1.1.2 mod_chroot/0.5 system stuff TIME = 20081106172629 TIME_DAY = 06 TIME_HOUR = 17 TIME_MIN = 26 TIME_MON = 11 TIME_SEC = 29 TIME_WDAY = 4 TIME_YEAR = 2008
Very useful for debuggin Rewrite Conditions and Rules.