这个E
标志用于LiteSpeed,而不是ENV
对于Apache。
你从哪里弄来的?这个LiteSpeed docs 似乎表明LiteSpeed在这方面与Apache相同,并且需要env=
, 不E=
, 在Header
指令,以便根据环境变量的存在有条件地设置HTTP响应标头。
在LiteSpeed服务器上进行了测试后,我可以确认情况确实如此。这似乎是你上述指令的问题所在。使用E=
似乎会导致标题被无条件设置,这似乎就是您所看到的。(LiteSpeed实际如何解释E=<var>
不清楚-可能只是“忽略”了它!?根据我的经验,LiteSpeed似乎只是“忽略”它不理解的指令/语法-不会生成任何错误,这使得调试很麻烦!)
旁白:在Apache上,当重写过程重新开始时,在WordPress将请求重写为index.php
. 例如,在Apache上,您需要测试REDIRECT_NOINDEXNOFOLLOW
, 而不是NOINDEXNOFOLLOW
. 然而,LiteSpeed的情况似乎并非如此。
RewriteCond %{REQUEST_URI} ^(.*)?faq?(/)$ [NC]
RewriteRule ^faq - [E=NOINDEXNOFOLLOW]
旁白:你的
RewriteCond
似乎没有必要(而且过于复杂)。以及
RewriteCond
(
条件)和RewriteRule
指令在某种程度上存在冲突。。。您已完成RewriteCond
但是,不区分大小写RewriteRule
不是,因此当条件匹配时FaQ
, 这个RewriteRule
仅匹配项faq
(全部小写)。这个RewriteCond
匹配项fa
(自尾随q
是可选的),但是RewriteRule
仅匹配项faq
(自尾随q
此处不是可选的)。因此,上述内容可以写成一条指令:
RewriteRule ^faq/$ - [E=NOINDEXNOFOLLOW]
注意:请注意,在使用mod\\u rewrite设置环境变量时,如果没有指定的值,则会将其设置为空字符串。(这与mod\\u env和mod\\u setenif不同,后者会将变量设置为1
.) 实际上,这不会导致Header
指令。然而,如果您只是基于请求的URL设置一个env var,那么我将使用SetEnvIf
(mod\\u setenif)而不是mod\\u rewrite。例如:
SetEnvIf Request_URI ^/faq/$ NOINDEXNOFOLLOW
请注意,这会将变量设置为1
, 而不是空字符串。总结
您应该在LiteSpeed上使用以下选项:SetEnvIf Request_URI ^/faq/$ NOINDEXNOFOLLOW
Header set X-Robots-Tag "noindex, nofollow" env=NOINDEXNOFOLLOW
在Apache上,您需要修改Header
测试的指令REDIRECT_NOINDEXNOFOLLOW
相反(如上所述)。例如:SetEnvIf Request_URI ^/faq/$ NOINDEXNOFOLLOW
Header set X-Robots-Tag "noindex, nofollow" env=REDIRECT_NOINDEXNOFOLLOW