什么';HTTP_URL、请求_URI和这些其他IIS变量之间的区别是什么?

什么';HTTP_URL、请求_URI和这些其他IIS变量之间的区别是什么?,iis,iis-7,iis-7.5,iis-6,url-rewrite-module,Iis,Iis 7,Iis 7.5,Iis 6,Url Rewrite Module,我遇到了各种规则,并注意到有许多变量看起来是相同的。例如,它没有解释PATH\u INFO和URL之间的任何区别,它甚至没有提到REQUEST\u URI,等等 {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 {UNEN

我遇到了各种
规则,并注意到有许多变量看起来是相同的。例如,它没有解释
PATH\u INFO
URL
之间的任何区别,它甚至没有提到
REQUEST\u URI
,等等

{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

除了查询字符串,到目前为止我还没有发现任何其他差异。还有其他差异吗?为什么我们有多个相同值的变量?

我不能完全回答你的问题(因为文档不清楚),我对此做了一些研究。以下是我对一些变量的发现:

{REQUEST_URI}

返回您请求的准确URL。例如,如果根目录中有
default.aspx
文件,您将访问您的网站根目录。然后:

{REQUEST_URI}是“”

{PATH_INFO}、{HTTP_URL}、{UNENCODED_URL}是“/default.aspx”

{R:1}

返回regexp中的第一个匹配项。例如,如果您匹配的regexp是
part(.*)part(.*)part(.*)
,那么您将访问url
/partApartBpartC
。然后:

{R:0}是“partApartBpartC”

{R:1}是“A”

{R:2}是“B”

{R:3}是“C”

{UNENCODED_URL}

返回原始的、未编码的URL。例如,如果您将访问
/“asdasd”“asdsa
,则:

{REQUEST_URI}是
/“asdasd”“”“”asdsa


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

您确定
UNENCODED_URL
包含像
%22
这样的编码字符吗?