HTTP_URL、REQUEST_URI和其他IIS变量之间有什么区别?

10
我看到了许多不同的<rewrite>规则,并且注意到很多变量似乎是相同的。然而IIS服务器变量文档并没有提供太大帮助,例如它并未解释PATH_INFOURL之间的任何区别,甚至没有提及REQUEST_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

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

其中许多只在服务特定的URL时显示不同的值。例如,如果输入的URL是/path/to/file.ext/some_path_info,那么PATH_INFOURL显然是不同的。“到目前为止我还没有发现其他的差异”并不奇怪,因为通常除非你是IIS扩展作者(ISAPI或其他),否则你不会接触到所有与URL相关的知识。完全记录所有细节是具有挑战性的,因为只有一小群人关心这个问题。 - Lex Li
1个回答

8

我无法完全回答你的问题(因为文档不够清晰),所以我做了一些研究。下面是我对某些变量的发现:

{REQUEST_URI}

返回您请求的确切URL。例如,如果您在根目录中有default.aspx文件,并且您要访问您的网站根目录,则:

{REQUEST_URI} 为空字符串

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

{R:1}

返回正则表达式中的第一个匹配项。例如,如果您的匹配的正则表达式是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 这样的编码字符吗? - Rudey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接