如何根据URL设置Apache条件头?

时间:2017-03-14 16:21:21

标签: regex apache .htaccess if-statement header

我想根据URL设置不同的HTTP标头。在我的特定情况下,我希望特定的网址(例如正则表达式^/abc$)具有与其他网址不同的标头。

我正在尝试这个:

<IfModule mod_headers.c>
    <If "%{REQUEST_URI} =~ /^\/abc$/">
        Header set Content-Security-Policy: "default-src 'none'; style-src 'self' 'unsafe-inline';"
    </If>
    <Else>
        Header set Content-Security-Policy: "default-src 'none'; child-src https: *.youtube.com 'self'; connect-src 'self'; font-src 'self'; img-src 'self'; script-src https: *.ytimg.com *.youtube.com 'self'; style-src 'self';"
    </Else>
</IfModule>

然而,这似乎不起作用,日志说:

Cannot parse condition clause: Failed to compile regular expression

我做错了什么,我怎样才能让它发挥作用?

我还尝试了备用正则表达式m#^/abc$#,然后没有错误,但If条件没有匹配。

3 个答案:

答案 0 :(得分:5)

使用If这样的条件来评估正则表达式:

<If "%{REQUEST_URI} =~ m#^/abc/?$#">

编辑:关于Apache 2.4+以下的作品:

<IfModule mod_headers.c>
    <If "%{THE_REQUEST} =~ m#\s/+abc/?[?\s]#">
        Header set Content-Security-Policy: "default-src 'none'; style-src 'self' 'unsafe-inline';"
    </If>
    <Else>
        Header set Content-Security-Policy: "default-src 'none'; child-src https: *.youtube.com 'self'; connect-src 'self'; font-src 'self'; img-src 'self'; script-src https: *.ytimg.com *.youtube.com 'self'; style-src 'self';"
    </Else>
</IfModule>

如果您使用较旧的Apache,请使用此mod_rewrite技巧:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+abc/?[\s?] [NC]
RewriteRule ^ - [E=MYENV1:1]

RewriteCond %{THE_REQUEST} !\s/+abc/?[\s?] [NC]
RewriteRule ^ - [E=MYENV2:1]

Header set Content-Security-Policy "default-src 'none'; style-src 'self' 'unsafe-inline';" env=MYENV1
Header set Content-Security-Policy "default-src 'none'; child-src https: *.youtube.com 'self'; connect-src 'self'; font-src 'self'; img-src 'self'; script-src https: *.ytimg.com *.youtube.com 'self'; style-src 'self';" env=MYENV2

答案 1 :(得分:0)

这是从documentation中摘录的单行代码:

public bool DoesThisGetReset { get; set; }

答案 2 :(得分:-1)

我有一个类似的问题,但是我想使用解析的字符串创建一个新的标题

<IfModule mod_headers.c>
    <If "%{THE_REQUEST} =~ /(.*)/.*">
        Header set XKEY: "WP_$1"
    </If>
</IfModule>

假设我去

monsite/abc.../def

我想添加标题

XKEY: WP_abc

我的测试

# Set XKEY Header
Header set XKEY: "WP_%{REQUEST_URI}e"
Header edit XKEY: /(.*)/(.*)$ $1

但是我还是把所有东西都弄明白了 XKEY:WP_corporate / particuliers-professionnels 而不是WP_corporate

另一种方法可能是使用另一个标头,在这种情况下,我有一个标头 x-url:/ abc / def 我尝试使用https://serverfault.com/questions/900481/how-to-add-a-header-using-another-headers-value-in-apache-http-server

RequestHeader set XKEY "WP_%{x-url}"

但仅适用于abc部分。