如何解决Apache mod_rewrite [E] 使用 RewriteCond 重定向前缀
在 Apache 服务器中,如果匹配特定 URL,我需要禁用 keepalive。
为此,我使用 mod_rewrite 对其进行设置,然后让脚本运行。
RewriteCond %{REQUEST_URI} ^/specific_url
RewriteRule ^ - [E=nokeepalive]
.......
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
现在我的问题是,如果匹配,nokeepalive
最终会被前缀/重命名为 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,而不管值如何) - 但无济于事。
解决方法
我不能使用 SetEnvIf,因为我使用了 mod_rewrite,所以我必须使用 RewriteRule。
您可以将 mod_setenvif 与 <If>
一起使用。
<If "%{REQUEST_URI} =~ /regextomatchurl/">
# or use <If "%{REQUEST_URI} == 'urlstring'">
SetEnv nokeepalive 1
</If>
您可以删除该重写规则。
或:
你可以添加这个,它可能会工作,没有测试:
SetEnv nokeepalive ${REDIRECT_nokeepalive}
编辑:
记得在 PassEnv REDIRECT_nokeepalive
之前添加 SetEnv
,因为 SetEnv
无法从 mod_rewrite 读取环境变量。
只是指出:
这里有两个空格,这可能会导致其他 RewriteRule 将来出现问题:
RewriteRule ^ - [E=nokeepalive]
^^
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。