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]
^^
在 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]
^^