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?
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