Apache SetEnvIf请求\u URI与URL不匹配

Apache SetEnvIf请求\u URI与URL不匹配,apache,.htaccess,Apache,.htaccess,我试图在任何以/exit/开头的URL上将HTTP头X-Robots-Tag设置为“noindex”,但我不明白为什么setenif Request_URI与我的URL不匹配 试图解决问题的.htaccess文件的一部分: # For info SetEnvIf Request_URI ^(.*)$ REQUEST_URI=$1 Header set X-Request-Uri "%{REQUEST_URI}e" # Works SetEnvIf Request_URI ^/.* WHY1 H

我试图在任何以/exit/开头的URL上将HTTP头X-Robots-Tag设置为“noindex”,但我不明白为什么setenif Request_URI与我的URL不匹配

试图解决问题的.htaccess文件的一部分:

# For info
SetEnvIf Request_URI ^(.*)$ REQUEST_URI=$1
Header set X-Request-Uri "%{REQUEST_URI}e"

# Works
SetEnvIf Request_URI ^/.* WHY1
Header set X-Test1 "test1" env=WHY1

# Does not work any more
SetEnvIf Request_URI ^/e.* WHY2
Header set X-Test2 "test2" env=WHY2
SetEnvIf Request_URI ^\/e.* WHY3
Header set X-Test3 "test3" env=WHY3
SetEnvIf Request_URI ^\/\e.* WHY4
Header set X-Test4 "test4" env=WHY4
SetEnvIf Request_URI ^/\e.* WHY5
Header set X-Test5 "test5" env=WHY5

# What i'd like it worked
SetEnvIf Request_URI ^/exit/.* NOINDEX
Header set X-Robots-Tag "noindex" env=NOINDEX
这是我在Chrome浏览器的“网络”选项卡中看到的内容:

x-request-uri: /exit/22216832/
x-test1: test1
x-request-uri: /exit/12313/
x-request-uri1: /index.php
这正是我所期望的:

x-request-uri: /exit/22216832/
x-test1: test1
x-test2: test2
x-test3: test3
x-test4: test4
x-test5: test5
x-robots-tag: noindex

编辑

我牺牲了更多的头发,发现我实际上是在覆盖请求URI,这似乎是某种全局变量。经过更多的测试,我还发现这个变量有点撒谎:

.htaccess文件:

# Getting value from a global variable
Header set X-Request-Uri "%{Request_URI}e"

# Expecting that Request_URI1 will have the same value as Request_URI
SetEnvIf Request_URI ^(.*)$ Request_URI1=$1
Header set X-Request-Uri1 "%{Request_URI1}e"
Chrome浏览器中的“网络”选项卡:

x-request-uri: /exit/22216832/
x-test1: test1
x-request-uri: /exit/12313/
x-request-uri1: /index.php

因此,全局空间中的Request_URI是/exit/12313/,但在setenif中是/index.php,他们说magic不存在☺.

这是一种稍有不同的情况,但根本问题是相同的:您可以使用
SetEnv
。mod_setenif有点难以正确使用。这是一种稍微不同的情况,但基本问题是相同的:您可以使用
SetEnv
。mod_setenif有点难以正确使用。