What's the difference between HTTP_URL, REQUEST_URI and these other IIS variables?

Rudey picture Rudey · Jan 3, 2018 · Viewed 8.5k times · Source

I came across various <rewrite> rules and noticed there are a lot of variables that appear to be the same. The IIS Server Variables documentation isn't really helping, for example it doesn't explain any difference between PATH_INFO and URL, it doesn't even mention REQUEST_URI at all, etc.

{HTTP_URL}      = /path/to/file.ext?key=value
{PATH_INFO}     = /path/to/file.ext
{R:1}           = /path/to/file.ext
{REQUEST_URI}   = /path/to/file.ext?key=value
{UNENCODED_URL} = /path/to/file.ext?key=value
{URL}           = /path/to/file.ext
{URL_PATH_INFO} = /path/to/file.ext

Besides the query string, I haven't found any other differences so far. Are there other differences, and why do we have multiple variables with the same value?

Answer

Victor Leontyev picture Victor Leontyev · Jan 5, 2018

I cannot answer completely to your question (because documentation is not clear) and I did some research about that. Here are my findings for some variables:

{REQUEST_URI}

Returns exact URL what you requested. For example, if you have default.aspx file in the root and you will access your website root. Then:

{REQUEST_URI} is ""

{PATH_INFO}, {HTTP_URL}, {UNENCODED_URL} is "/default.aspx"

{R:1}

Returns a first match in your regexp. For example, if you match regexp is part(.*)part(.*)part(.*) and you will access url /partApartBpartC. Then:

{R:0} is "partApartBpartC"

{R:1} is "A"

{R:2} is "B"

{R:3} is "C"

{UNENCODED_URL}

Returns the raw, unencoded URL. For example if you will access /"asdasd"""""asdsa Then:

{REQUEST_URI} is /"asdasd"""""asdsa

{UNENCODED_URL} is /%22asdasd%22%22%22%22%22asdsa