Apache mod_rewrite [E] 带 RewriteCond 的重定向前缀

Apache mod_rewrite [E] Redirect prefix with RewriteCond

在 Apache 服务器中,如果匹配到特定 URL,我需要禁用 keepalive。
为此,我使用 mod_rewrite 进行设置,然后让脚本 运行 顺其自然。

RewriteCond %{REQUEST_URI} ^/specific_url
RewriteRule  ^ - [E=nokeepalive]
.......
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

现在我的问题是 nokeepalive 最终 prefixed/renamed 与 REDIRECT_ 匹配
来自这个问题:When setting environment variables in Apache RewriteRule directives, what causes the variable name to be prefixed with "REDIRECT_"?
我认为这是由于 RewriteRule
但它没有前缀 如果我删除 RewriteCond (这将禁用 keepAlive 全局与任何 URL)
有没有办法用 RewriteCond 来防止这个前缀?
我不能使用 SetEnvIf 因为我使用 mod_rewrite 所以我必须使用 RewriteRule.

SetEnv/SetEnviF 也不起作用,因为它们无法读取未使用 SetEnv/SetEnvif 分配的变量。 我尝试使用 SetEnvIf 仅在存在 REDIRECT_nokeepalive 时进行定义(因为无论值如何,都必须定义 nokeepalive)- 但无济于事。

I cannot use SetEnvIf since I use mod_rewrite so I must use RewriteRule.

您可以将 mod_setenvif 与 <If> 一起使用。

<If "%{REQUEST_URI} =~ /regextomatchurl/">
# or use <If "%{REQUEST_URI} == 'urlstring'">
SetEnv nokeepalive 1
</If>

您可以删除该重写规则。

或:

你可以只添加这个,它可能有效,未经测试:

SetEnv nokeepalive ${REDIRECT_nokeepalive}

编辑:

记得在SetEnv之前添加PassEnv REDIRECT_nokeepalive因为SetEnv无法从mod_rewrite读取环境变量。

只想指出:

你这里有两个空格,这可能会导致其他 RewriteRule 将来出现问题:

RewriteRule  ^ - [E=nokeepalive]
           ^^