如何基于URL设置Apache条件标头



我想根据URL设置不同的HTTP标头。在我的特殊情况下,我希望特定的URL(例如Regex ^/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条件的匹配。

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

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

编辑: on 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

这是从文档中获得的单行替代方法:

Header always set CustomHeader my-value "expr=%{REQUEST_URI} =~ m#^/special_path.php$#"

最新更新