9

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?

Rudey
  • 4,717
  • 4
  • 42
  • 84
  • Many of them only show different values when you serve specific URLs. For example, if input URL is `/path/to/file.ext/some_path_info`, then `PATH_INFO` and `URL` are clearly different. "I haven't found any other differences so far" is not surprising as usually unless you are an IIS extension author (ISAPI or other) you are not given enough exposure to all kinds of URL related knowledge. It is challenging to fully document all details behind, as only a tiny group of people care about that. – Lex Li Aug 14 '22 at 06:49

1 Answers1

8

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

Victor Leontyev
  • 8,488
  • 2
  • 16
  • 36