检查RewriteCond中的特定标头值

时间:2015-03-27 16:10:31

标签: apache mod-rewrite

我正在配置我的新Apache2.4 Web服务器。

在我的一个VirtualHost中,当我将<If>条件设置为true时,我将每个人的重定向配置为维护页面,除非自定义请求的标头包含值:

<If "true">
    RewriteCond %{HTTP:UserId} !=ab123
    RewriteCond %{REQUEST_URI} !=/maintenance.html
    RewriteRule ^ /maintenance.html [R=302]
</If>

是否可以允许检查多个值而不是只有一个?

我想要像:

RewriteCond %{HTTP:UserId} not in (ab123, ze678, gt456)

这是管理员的UserId。

1 个答案:

答案 0 :(得分:4)

我认为您不需要包含任何IF条件。以下应该没问题:

RewriteCond %{HTTP:UserId} !^(ab123|ze678|gt465)$
RewriteCond %{REQUEST_URI} !maintenance.html
RewriteRule ^ /maintenance.html [R=302]

前两个RewriteCond在逻辑AND中工作,因此除非两者都为真,否则不会执行该规则。您可以使用OR d正则表达式检查标题中的用户ID。

如果该字段包含其他值,您可以移除锚^$,但检查不会安全